Closed5
TypeScriptのts-nodeでのコマンドライン実行からnpmパッケージを使ってみる
npmのパッケージはなんでもいいが、試しにこれを使ってみる。
$ npm install ts-node chalk
package.json
{
"dependencies": {
"chalk": "^5.3.0",
"ts-node": "^10.9.1"
}
}
main.ts
import chalk from 'chalk';
console.log(chalk.blue('Hello world!'));
$ npx ts-node main.ts
以下のようなエラーが出る。
Error [ERR_REQUIRE_ESM]: require() of ES Module /home/ec2-user/foo/node_modules/chalk/source/index.js from /home/ec2-user/foo/main.ts not supported.
tsconfig.json
を作成し、以下の内容にする。
{
"compilerOptions": {
"module": "esnext",
},
}
/home/ec2-user/foo/node_modules/ts-node/src/index.ts:859
return new TSError(diagnosticText, diagnosticCodes, diagnostics);
^
TSError: ⨯ Unable to compile TypeScript:
main.ts:1:19 - error TS2792: Cannot find module 'chalk'. Did you mean to set the 'moduleResolution' option to 'nodenext', or to add aliases to the 'paths' option?
1 import chalk from 'chalk';
言われた通り tsconfig.json
に "moduleResolution": "nodenext"
を追記する。
{
"compilerOptions": {
"module": "esnext",
"moduleResolution": "nodenext"
},
}
別のエラーになる。
(node:43) Warning: To load an ES module, set "type": "module" in the package.json or use the .mjs extension.
(Use `node --trace-warnings ...` to show where the warning was created)
/home/ec2-user/foo/main.ts:1
import chalk from 'chalk';
^^^^^^
SyntaxError: Cannot use import statement outside a module
package.json
に "type": "module"
を追記する。
{
"type": "module",
"dependencies": {
"chalk": "^5.3.0",
"ts-node": "^10.9.1"
}
}
別のエラーになる。
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /home/ec2-user/foo/main.ts
実行コマンドを npx ts-node main.ts
ではなく node --loader ts-node/esm main.ts
にしたら、できた。
$ node --loader ts-node/esm main.ts
(node:30) ExperimentalWarning: Custom ESM Loaders is an experimental feature and might change at any time
(Use `node --trace-warnings ...` to show where the warning was created)
Hello world!
ちなみに npx ts-node --esm main.ts
では解決しなかった。なぜだろう。
このスクラップは2023/07/09にクローズされました