はじめに
batchファイルを
npx ts-node --esm 'batchファイルのパス')
で実行しようとした際に、
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for 'batchファイルのパス'
というエラーが発生しました。
今回はこちらのエラーの解決方法をご紹介します。
環境
Node.js: v22.9.0
ts-node: v10.9.2
TypeScript: v5.6.3
ts-node とは?
ts-nodeは、TypeScriptファイルを直接Node.js環境で実行するためのツール。
TypeScriptコードをJavaScriptにコンパイルせずに直接実行可能。
解決方法
// tsxをインストール
npm install tsx
tsx とは?
tsxは、Node.js環境でTypeScriptファイルを直接実行するためのモダンなツール。
ts-nodeとの違い:
ESM/CJS間の混在を気にせず実行可能。
tsxをインストール後、
npx tsx 'batchファイルのパス'
を実行するとbatchファイルが起動する。
補足
batchファイル内で環境変数を使用している場合、
npx tsx -r dotenv/config 'batchファイルのパス'
というふうに-r dotenv/config
をコマンドに追加し、コマンド実行時に環境変数を事前に読み込ませる設定が必要です。
VITEを使用している場合、環境変数名の頭にVITE_
を使用していると思いますが、npx tsx -r dotenv/config
で環境変数を読み込む場合は環境変数名の頭のVITE_
があるとエラーになります。
別途VITE_
がついていない環境変数を追加するなど適宜対応してください。
まとめ
今回のエラーはNode.jsとts-nodeのバージョンが合わないために起こったエラーでした。
エラー解決の途中でNode.js環境でTypeScriptファイルを直接実行ツールであるts-nodeとよりモダンなツールであるtsxについて学ぶことが出来たので良かったです。