Loader 옵션으로 타입스크립트 실행시키기

Loader 옵션으로 타입스크립트 실행시키기

NodeJS의 Loader 옵션으로 타입스크립트 파일을 변환하지 않고 바로 실행할 수 있습니다.

·

1 min read

기본적으로 타입스크립트는 자바스크립트 파일로 변환해야 NodeJS로 실행이 가능하지만 ts-node로 직접적인 변환 과정을 생략할 수 있다.

npm install -D ts-node
npx ts-node ./scripts/the-file-you-want-to-execute.ts

TypeScript 설정이 명시되어있는 tsconfig.json에서 ts-node 관련 설정만 추가해주면 모듈 에러 없이 실행이 가능했다.

module 속성으로 CommonJS를 명시해서 외부 모듈이 필요할 때 NodeJS에서 호환 가능한 require를 호출하도록 할 수 있다.

target은 타입스크립트가 어떤 버전의 자바스크립트 파일로 변환할지 명시한다. ES6이라 적혀있어도 require 또한 호환되도록 컴파일된다.

{
  "ts-node": {
    "compilerOptions": {
      "target": "ES6",
      "module": "CommonJS",
      "moduleResolution": "node"
    },
    "esm": true
  }
}

몇몇 프로젝트에서는 package.json"type": "module"이 작성되어있는데 이때 ts-node가 작동하지 않는 경우가 많았다. 자주 마주친 에러는 'ERR_UNKNOWN_FILE_EXTENSION'로 인터넷 검색 결과 여러 사람들이 이 에러를 마주치고 있는 것으로 보였다.

해결책

ts-node를 직접적으로 호출하지 않고 node 명령어에 loader 옵션을 추가함으로써 타입스크립트 파일을 컴파일 없이 실행시킬 수 있다.

ESM Loader를 사용하기 때문에 tsconfig.jsonmodule 옵션을 ES 모듈을 지원하는 버전으로 바꿔줄 필요가 있다.

{
  "compilerOptions": {
    "lib": ["DOM", "DOM.Iterable", "ESNext"],
    "target": "ES6",
    "module": "ES6",
    "moduleResolution": "Node"
  }
}
npm install -D ts-node
node --loader ts-node/esm ./scripts/the-file-you-want-to-execute.ts

실행할 때 경고문이 출력되지 않게 하려면 옵션을 더 추가하면 된다.

node --no-warnings --loader ts-node/esm ./scripts/the-file-you-want-to-execute.ts