Как заставить babel-узел конвертировать файлы, на которые ссылаются Workers, в общие js? (как бабел делает) - PullRequest
1 голос
/ 09 января 2020

В приложении 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"
      }
    ]
  ]
}
...