안녕하세요, 교양있는 개발자 데이비드입니다.
nodejs나 reactjs 개발자가 아니더라도, 요즘에는 필수 교양으로 스크립트 언어 하나는 다룰 수 있어야 하잖아요?
오늘은 TypeScript를 준비했으니 한 번 구경하고 가세요.
준비물#
- 맥북
note
Windows로 설명하려니 귀찮습니다. 그냥 macOS 기준으로 설명하겠습니다.
사전 작업#
tip
이미 되어 있으면 다음으로 넘어갑니다.
homebrew 설치#
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"nvm 설치#
NVM은 여러 버전의 Node를 설치해놓고 전환할 수 있는 Node Version Manager입니다.
brew install nvmnvm 환경변수 추가#
- bash
- zsh
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrcecho '[ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh" # This loads nvm' >> ~/.bashrcecho '[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion' >> ~/.bashrcecho 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrcecho '[ -s "/usr/local/opt/nvm/nvm.sh" ] && . "/usr/local/opt/nvm/nvm.sh" # This loads nvm' >> ~/.zshrcecho '[ -s "/usr/local/opt/nvm/etc/bash_completion.d/nvm" ] && . "/usr/local/opt/nvm/etc/bash_completion.d/nvm" # This loads nvm bash_completion' >> ~/.zshrcnode.js 설치#
nvm install 16info
다른 버전이 필요하면 해당 버전을 입력하면 됩니다.
nvm install 14.17.6npm 업그레이드#
npm install -g npmyarn 업그레이드#
npm install -g yarn프로젝트 초기화#
디렉터리 생성#
mdkir <프로젝트>cd <프로젝트>git 저장소 초기화#
git init프로젝트 초기화#
yarn init질문에 적절히 답변합니다.
typescript 설치#
yarn add typescript --devtypescript 초기화#
yarn tsc --inittsconfig.json 파일이 생성됩니다.
tsconfig.json 설정#
tsc --init을 실행하면 tsconfig.json 파일이 생성됩니다.
TypeScript 프로젝트를 어떻게 빌드할지 설정하는 파일입니다.
info
각 옵션 필드의 내용은 TSConfig Reference 소개를 참조하십시오.
저는 tsconfig.json과 tsconfig.prod.json를 각각 선언해서 사용합니다.
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "outDir": "./lib", "rootDir": "./src", "strict": true, "moduleResolution": "node", "esModuleInterop": true, "experimentalDecorators": true, "emitDecoratorMetadata": true, "resolveJsonModule": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true }}{ "extends": "./tsconfig.json", "include": ["src/**/*.ts"], "exclude": ["src/**/*.test.ts"]}각각 어떤 설정인지 한 번 알아보세요.
tip
compilerOptions.target은 node.js 런타임의 버전에 따라 지정합니다.
빌드하기#
note
tsc 컴파일러는 ts 파일을 js 파일과 d.ts 파일로 변환합니다.
tsconfig.json 사용해서 빌드#
현재 디렉터리의 tsconfig.json을 기본값으로 사용해서 빌드합니다.
tsc --build --force별도의 설정을 사용해서 빌드#
만약 다른 설정 파일을 사용해서 빌드하려면 명시적으로 입력해줍니다.
tsc --build --force tsconfig.prod.jsontip
package.json 파일의 scripts 항목에 선언해 놓으면 다음에 사용하기 편합니다.
{ "scripts": { "build": "tsc --build --force", "build:prod": "tsc --build --force tsconfig.prod.json", ... }, ...}실행하기#
note
tsconfig.json에서 compilerOptions.outDir에 ./lib 경로를 지정했기 때문에, 해당 경로에 js, d.ts 파일이 생성됩니다.
경로를 지정하면 해당 디렉터리에 있는 index.js를 먼저 실행합니다.
node lib/index.js 대신 다른 파일을 실행하려면 파일 이름을 명시적으로 지정합니다.
$ node lib/server.jstip
package.json 파일의 main 항목을 지정하면 다음에 사용하기 편합니다.
{ "main": "lib/index.js", ...}그러면 이렇게 사용할 수 있습니다.
node .빌드와 실행을 한방에 하기#
일일이 빌드, 실행 과정을 수동으로 반복하는 것은 괴롭습니다.
아예 ts 파일을 js 파일처럼 읽어서 바로 실행해주는 ts-node 모듈이 있습니다.
ts-node 설치#
yarn add ts-node --dev이제 그냥 이렇게 하면 됩니다.
ts-node src/index.tsinfo
자세한 내용은 ts-node 공식 문서를 참조하세요.
Watch#
파일의 업데이트를 감지하여 자동으로 빌드를 재실행하는 기능을 watch라고 합니다.
ts-node-dev라는 모듈을 사용해보겠습니다.
note
ts-node-dev = ts-node + node-dev
ts-node-dev 설치#
yarn add ts-node-dev --dev이런 식으로 사용하면 됩니다.
ts-node-dev --respawn ./srctip
package.json 파일의 scripts 항목에 선언해 놓으면 다음에 사용하기 편합니다.
{ "scripts": { "debug": "ts-node-dev --respawn ./src", ... }, ...}잘 되나요?#
console.log('Hello, World!')실행 결과#
$ yarn debug
Hello, World!그럼 앞으로 즐거운 TypeScript 코딩하시기 바랍니다.
