目的
本記事ではNode.jsとTypeScriptを業務で利用しているエンジニア向けに、同じスクリプトでも実行環境によって動いたり動かなかったりする原因を調査した内容を共有します。
導入
シェルパ・アンド・カンパニー株式会社でプロダクト開発を担当しているkokiです。
このあいだ次のような不思議な現象が報告されました。
- もともと以下のコマンドを、各開発者がローカルで必要になったタイミングで実行していた。
npx ts-node ./test.ts
- ある日、1.のコマンドを実行するとエラーが出て実行できなくなっていた
- エラーメッセージ(一部):
Error [ERR_REQUIRE_ESM]: require() of ES Module
- エラーメッセージ(一部):
- 該当箇所周辺をコミットしていた人は
env-cmd -f ./.env.local npx ts-node ./test.tsというスクリプトで実行していた。この実行は成功する
最初は「ESMとCommonJSの違いについてtsconfigを見てけば良さそう」と思ってたのですがこの予想は外れ、なぜ env-cmd 経由だと動くのか、すぐには原因を突き止められませんでした。(※1)