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

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

```sh
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` 또한 호환되도록 컴파일된다.

```json
{
  "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.json`의 `module` 옵션을 ES 모듈을 지원하는 버전으로 바꿔줄 필요가 있다.

```json
{
  "compilerOptions": {
    "lib": ["DOM", "DOM.Iterable", "ESNext"],
    "target": "ES6",
    "module": "ES6",
    "moduleResolution": "Node"
  }
}
```

```sh
npm install -D ts-node
node --loader ts-node/esm ./scripts/the-file-you-want-to-execute.ts
```

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

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