Проблема в веб-пакете не понимает Синтаксис React JSX, поэтому он не может правильно обработать этот тип файла. Чтобы это исправить, вам нужно настроить загрузчик веб-пакетов для преобразования JSX в собственный JavaScript. Для этого вам необходимо использовать babel-loader
babel и установить соответствующий пресет babel, а именно пресет "@babel/preset-react"
.
A preset представляет собой набор плагинов, используемых для поддержки определенного языка. функции. Вы используете пресеты, чтобы воспользоваться новейшими функциями JavaScript, которые еще не были реализованы в браузерах.
Пресеты преобразуют ваш исходный код и синтаксис для обеспечения совместимости с собственным JavaScript, который понимают браузеры. Например, @babel/preset-react
позволит вам писать код стиля JSX (JavaScript как XML), который обычно используется для определения компонентов React, хотя JSX не понимается браузером .
.
Может быть, вы могли бы попробовать следующее и посмотреть, помогут ли эти шаги решить вашу проблему:
Установить предустановку реакции babel:
npm install --save-dev @babel/preset-react
В вашем файле .babelrc
(или package.json
), в зависимости от того, где у вас есть конфигурация Babel для пресетов и плагинов, добавьте новый пресет для обработки специфичного для JSX синтаксиса реагирования.
Примечание : если у вас нет файла .babelrc
, добавьте его в корневой каталог вашего проекта и присвойте ему следующее содержимое:
.babelrc:
{
"presets": [
"@babel/preset-env",
"@babel/preset-react"
]
}
Обновите раздел rules
в вашем файле webpack.config.js
, чтобы использовать соответствующий загрузчик:
{
test: /\.(js|jsx)$/,
include: path.resolve(__dirname, 'src'),
exclude: /(node_modules|bower_components|build)/,
use: ['babel-loader']
}
Примечание : Я бы также добавил раздел resolve
в ваш webpack.config.js
, чтобы настроить способ разрешения модулей в вашем проекте. Что-то вроде:
resolve: {
extensions: ['*', '.js', '.jsx']
},
Для полноты картины я создал простое веб-приложение, использующее React и работающее с webpack-dev-server. Ниже выложено все мое содержимое webpack.config.js
:
module.exports = {
entry: './src/index.js',
module: {
rules: [
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: ['babel-loader']
}
]
},
resolve: {
extensions: ['*', '.js', '.jsx']
},
output: {
path: __dirname + '/dist',
publicPath: '/',
filename: 'bundle.js'
},
devServer: {
contentBase: './dist'
},
mode: 'development'
};
Надеюсь, это поможет!