4

Express.js アプリでは、Babel を使用して、起動する前に commonjs にプリコンパイルしています。コンパイル手順は次のようになります。

babel ./src --out-dir dist
node ./dist/bin

プロジェクトの一部として、my-worker.js私が使用する場所と呼ばれるファイルがありますimport syntax:

# my-worker.js

import { parentPort, workerData } from 'worker_threads'
import axios from 'axios'
...

そして、それはによって使用されother-file.jsます:

#other-file.js

...
const worker = new Worker(__dirname + '/my-worker.js', { workerData: ... })
...

これはうまくいきます。Babel はすべてのファイルを commonjs に変換し、ワーカー スクリプトの読み込みが機能します。

しかし

を使用する@babel/nodeと、これは機能しません:

babel-node ./src/bin

警告が表示されます:

(ノード:4865) 警告: ES モジュールをロードするには、package.json で "type": "module" を設定するか、.mjs 拡張子を使用します。

エラーとともに:

モジュール外で import ステートメントを使用することはできません

"type": "module"ファイル拡張子を明示的に指定する必要があるため、使用したくありません。また、import X, { y } from ...構文がサポートされているかどうかもわかりません (これは気に入っています)。

ワーカー ファイルを に変更し、それに応じてステートメントを変更すると、ファイル名が に戻されるため、本番ビルドでは機能しmy-worker.mjsません。new Worker@babel/node.js

ワーカーによってロードされたファイルをロードしてキャッシュするにはどうすればよい@babel/nodeですか (これが必要なことだと思いますか?)。なぜこれは で機能し、 では機能し@babelないの@babel/nodeですか?


私の.babelrcファイルは次のようになります。

{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "usage",
        "corejs": 3,
        "targets": {
          "node": "13"
        },
        "modules": "commonjs"
      }
    ]
  ]
}
4

1 に答える 1