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"
}
]
]
}