Babel по умолчанию предполагает, что файлы, которые он обрабатывает, являются модулями ES (с использованием import
и export
). Если вы запускаете Babel на объектах в node_modules
(которые, вероятно, являются модулями CommonJS), вам нужно либо указать Babel обрабатывать все node_modules
как сценарии, либо указать Babel угадать тип на основе присутствия import
и export
. Гадать проще всего, поэтому вы можете добавить
sourceType: "unambiguous"
а также сказать Babel не запускать usage
преобразование на самом core-js
с помощью
ignore: [
/\/core-js/,
],
потому что в противном случае преобразование usage
будет фактически вставлять ссылки на core-js
в себя, вызывая циклы зависимости.
Итак, в конфигурации Babel верхнего уровня вы должны, например,
{
ignore: [
/\/core-js/,
],
sourceType: "unambiguous",
presets: [
['@babel/preset-env', { modules: false, useBuiltIns: 'usage' }],
],
}
Если вы хотите быть более конкретным, вы также можете сделать
{
ignore: [
/\/core-js/,
],
presets: [
['@babel/preset-env', { modules: false, useBuiltIns: 'usage' }],
],
overrides: [{
test: "./node_modules",
sourceType: "unambiguous",
}],
}
чтобы установить флаг только для файлов внутри node_modules
, но вряд ли от этого много пользы.
Что касается почему, это исправляет эту ошибку, проблема в том, что, если Babel думает, что что-то является модулем ES, он вставит import
операторы. Если вы вставляете операторы import
в файл, который также использует вещи CommonJS, например module.exports
, это означает, что теперь файл будет использовать обе модульные системы в одном файле, что является большой проблемой и вызывает наблюдаемые вами ошибки.
person
loganfsmyth
schedule
20.09.2018