※ この記事を書いてから1年以上経ってるかも
yarn ts-node src/lib/task/sample.ts を実行した際に、
ERR_UNKNOWN_FILE_EXTENSION エラーに遭遇した。
$ yarn ts-node src/lib/task/sample.ts
yarn run v1.22.18
$ /app/node_modules/.bin/ts-node src/lib/task/sample.ts
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/src/lib/task/sample.ts
at new NodeError (node:internal/errors:372:5)
at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:76:11)
at defaultGetFormat (node:internal/modules/esm/get_format:118:38)
at defaultLoad (node:internal/modules/esm/load:21:20)
at ESMLoader.load (node:internal/modules/esm/loader:407:26)
at ESMLoader.moduleProvider (node:internal/modules/esm/loader:326:22)
at new ModuleJob (node:internal/modules/esm/module_job:66:26)
at ESMLoader.#createModuleJob (node:internal/modules/esm/loader:345:17)
at ESMLoader.getModuleJob (node:internal/modules/esm/loader:304:34)
at async Promise.all (index 0) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
}
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
tsconfig.json に設定を追加したところ、動作するようになった。
{
"compilerOptions": {
//....
},
// ↓ 以下を追加
"ts-node": {
"esm": true
}
}
この記事にまとめている途中で、 tsconfig.json に追記する代わりに
--esm オプションを利用する方法を見かけた。
$ ts-node --esm ./sample.ts
試してないけど参考までに。
package.json で "type": "module" を指定している場合にこのエラーになりがちなようだけど、
tsconfig.json や package.json の他の設定にも寄りそうという感じで原因の特定まではしてない……🙃。
参考: https://github.com/TypeStrong/ts-node/issues/1007
気になる場合、↑ の issue を眺めれば色々わかりそう。