LoginSignup
1
0

【Node.js】ts-nodeの実行で躓いた話

Last updated at Posted at 2024-06-07

社内でNode.jsを使用した以下の勉強課題をいただきました。

この記事はJavaScriptで記載されていますが、TypeScriptに直して実行することが今回の課題です。

実行の条件として以下をもらいました。

  • TypeScriptで記載すること
  • 「require」ではなく、「import」を用いること
  • TypeScriptでは「node」コマンドは動かないので、「ts-node」で実行すること

上記条件にて、順にコードを記載していったところ、今回タイトルとして記載している「ts-node」の実行という、だいぶ初歩的なところで躓いたので備忘として整理しておきます。

環境はMac端末にて以下で実行しています。(多分現時点で最新の状態のハズ、、、)

% nodebrew -v
nodebrew 1.2.0

% node -v
v20.5.0

npm -v
9.8.0

概要

コードを記載し、下記コマンドにて「ts-node」を実行。

% ts-node [実行ファイル]

実行結果として以下がエラーとして出力されました。。

エラー内容

TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /実行リポジトリ/index.ts
    at new NodeError (node:internal/errors:399:5)
    at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:79:11)
    at defaultGetFormat (node:internal/modules/esm/get_format:121:38)
    at defaultLoad (node:internal/modules/esm/load:81:20)
    at nextLoad (node:internal/modules/esm/loader:163:28)
    at ESMLoader.load (node:internal/modules/esm/loader:605:26)
    at ESMLoader.moduleProvider (node:internal/modules/esm/loader:457:22)
    at new ModuleJob (node:internal/modules/esm/module_job:64:26)
    at ESMLoader.#createModuleJob (node:internal/modules/esm/loader:480:17)
    at ESMLoader.getModuleJob (node:internal/modules/esm/loader:434:34) {
  code: 'ERR_UNKNOWN_FILE_EXTENSION'
}

解決方法

エラー内容を調べると下記記事を見つけました。

こちらを参考に以下コマンドで実行。

npx tsx [実行ファイル]

結果としては無事にNode環境を立ち上げることができました。

原因調査

エラーになった原因を少し調査してみたところ、下記記事を見つけました。

ts-nodeはESMのTypeScriptでは動作しないことが今回のエラーの原因のようです。

終わりに

今回は「import」を用いることが条件として1つありました。
「ts-node」で実行することも条件としてありましたが、実行で時間を取られるのも癪ですし、動かなければ意味がないので、「ts-node」は諦め、「npx tsx」での実行となりました。

ただ、ほかにも調べてみると「ts-node」 かつ ES Modulesで実行できている参考サイトも多々見受けられたので、別の方法があるのかもしれません。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0