`Unexpected token import` в` webpack.config.babel.js` при использовании `{modules: false}`
У меня есть проект React, который использует Webpack в качестве модуля, и babel-loader
, чтобы преобразовать его в ES5, используя следующие настройки:
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: [
{
loader: "babel-loader"
}
]
}
]
},
Параметры задаются в автономном файле .babelrc
.
Babel 6.13.0 поддерживает модули ECMAScript, что означает, что модули ECMAScript не нужно сначала преобразовывать в модули CommonJS. Чтобы получить это поведение, в документации говорится, что мы должны использовать этот параметр в нашем .babelrc
.
{
presets: [["es2015", { "modules": false }], "react"]
}
Однако, когда я пытаюсь запустить Webpack, используя этот параметр, он возвращается с ошибкой:
$ ./node_modules/.bin/webpack
/home/d4nyll/foo/bar/webpack.config.babel.js:1
(function (exports, require, module, __filename, __dirname) { import webpack from 'webpack';
^^^^^^
SyntaxError: Unexpected token import
Я предполагаю, что это потому, что babel-loader
не действует на webpack.config.babel.js
и поэтому не распознает ключевое слово import
. Ошибка не появляется, когда { "modules": false }
удаляется, но я хочу эту функциональность. Как я могу заставить Бабеля распознать webpack.config.babel.js
?
Ответы
Ответ 1
Следующие работали для меня.
Установите .babelrc
на следующее:
{
"presets": ["es2015"]
}
Настройки .babelrc
относятся к файлу webpack.config.babel.js
.
Затем измените конфигурацию Webpack, чтобы включить параметры, которые вы хотите применить к вашему коду приложения.
module: {
rules: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: [
{
loader: "babel-loader",
options: {
"presets": [["es2015", {"modules": false}], "react"]
}
}
]
}
]
},
Ответ 2
Просто подчеркнуть, как вы, вероятно, знаете: ваша ошибка
`Unexpected token import` in `webpack.config.babel.js`...
не имеет ничего общего с тем, что вы строите, только с вашим webpack.config.babel.js
. Несмотря на свое название, ES6 не будет работать, если не будет сделано несколько вещей.
Что нужно сделать:
1) вам не нужно webpack.config.js
, если в вашем проекте есть webpack.config.babel.js
.
2) убедитесь, что в вашем package.json
вы находитесь на веб-странице версии 3 или выше для (1), чтобы удерживать true
3) убедитесь, что у вас есть .babelrc
, содержащий не менее env
или es2015
{ "presets": ["env"] }
4) убедитесь, что установлены следующие два установленных
npm install babel-cli --save-dev
npm install babel-preset-env --save-dev
Соответственно babel-preset-es2015
в зависимости от вашего .babelrc
. (читайте здесь, почему env
, возможно, немного прохладнее.)
Ответ 3
Если вы используете Webpack 2.6+, где используется import
, убедитесь, что вы используете этот плагин babel: https://www.npmjs.com/package/babel-plugin-syntax-dynamic-import
Ответ 4
Вы создали webpack.config.js, и при наборе для выполнения webpack
вы получаете ошибку выше. Причина, по которой ваш файл конфигурации webpack должен быть babelified
, прежде чем вы сможете его использовать,
1) Переименуйте webpack.config.js
в webpack.config.babel.js
.
2) Теперь создайте новый файл webpack.config.js
только с помощью следующих 2 строк
require('babel-register');
module.exports = require('./webpack.config.babel.js');
3) создайте файл .babelrc
параллельно вашему файлу webpack.config.js
со следующим содержимым. Мы должны сообщить babel явно, что пресет для использования.
{
"presets": ["latest",'react', 'es2015','stage-2']
}
4) добавьте следующие модули node к вашей зависимости (обязательно для пресетов, используемых в .babelrc
)
npm install babel-preset-env babel-preset-es2015 babel-preset-stage-2 babel-preset-latest babel-preset-react --save-dev
5) Вы закончили. Теперь, если вы выполните webpack --progress --colors --watch
, он должен работать.