В приложении Express. js я использую Babel для предварительной компиляции в обычный js перед его запуском. Этап компиляции выглядит следующим образом:
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 преобразует все файлы в общий js, и загрузка рабочего сценария работает .
НО
Когда я использую @babel/node
, это не ' t работа:
babel-node ./src/bin
Я получаю предупреждение:
(узел: 4865) Предупреждение: чтобы загрузить модуль ES, установите «type»: «module» в пакете . json или используйте расширение .m js.
Вместе с ошибкой:
Невозможно использовать оператор импорта вне модуля
Я не хочу использовать "type": "module"
, с тех пор я должен явно назвать расширения файлов, а также я не уверен, что поддерживается синтаксис import X, { y } from ...
(что мне нравится).
Если я изменяю свой рабочий файл на my-worker.mjs
и соответственно изменяю оператор new Worker
, то это работает с @babel/node
, но не с моей производственной сборкой, поскольку имена файлов возвращаются на .js
.
Как я могу получить @babel/node
для загрузки и кэширования (я полагаю, это то, что нужно для этого?) Файлов, загруженных Worker? Почему это работает с @babel
, а не с @babel/node
?
Мой .babelrc
файл выглядит так:
{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "usage",
"corejs": 3,
"targets": {
"node": "13"
},
"modules": "commonjs"
}
]
]
}