Ошибка сборки модуля ReactJS: SyntaxError: Неожиданный токен - ReactDOM.render
Почему я получаю эту ошибку ниже? Мое утверждение ReactDOM.render(<App/>, container);
это 100% законный код.
Мой репозиторий github: https://github.com/leongaban/react_starwars
![enter image description here]()
Файл app.js
import react from 'react'
import ReactDom from 'react-dom'
import App from 'components/App'
require('index.html');
// Create app
const container = document.getElementById('app-container');
// Render app
ReactDOM.render(<App />, container);
Компоненты/файл приложения
import React from 'react'
const App = () =>
<div className='container'>
<div className='row'>
</div>
<div className='row'>
</div>
</div>;
export default App;
Мой webpack.config
const webpack = require('webpack');
const path = require('path');
module.exports = {
entry: [
'./src/app.js'
],
output: {
path: path.resolve(__dirname, './build'),
filename: 'app.bundle.js',
},
module: {
loaders: [
{
test: /\.html$/,
loader: 'file-loader?name=[name].[ext]',
},
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader',
},
],
},
plugins: [
new webpack.NamedModulesPlugin(),
]
};
Ответы
Ответ 1
Используйте это как конфигурационный файл webpack
const webpack = require('webpack');
const path = require('path');
module.exports = {
entry: [
'./src/app.js'
],
output: {
path: path.resolve(__dirname, './build'),
filename: 'app.bundle.js',
},
module: {
loaders: [
{
test: /\.html$/,
loader: 'file-loader?name=[name].[ext]',
},
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['es2015', 'react']
}
},
],
},
plugins: [
new webpack.NamedModulesPlugin(),
]
};
Вам не хватает предустановок
Ответ 2
Я получил ту же ошибку, и мне просто нужно было добавить файл .babelrc к маршруту проекта (в том же месте, что и package.json), содержащий следующее:
{
"presets": [
"env",
"react"
],
"plugins": [
"transform-class-properties"
]
}
Ответ 3
Установите babel-preset-response для синтаксиса jsx.
npm install babel-preset-react
пресеты
loaders: [{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['react', 'es2015']
}
}
]
Ответ 4
Попробуйте добавить свойство resolve
в конфигурационный файл webpack:
resolve: {
extensions: ['.js', '.jsx']
},
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loaders: ["babel-loader"]
}
]
}
Ответ 5
Если кто-то работает с CRA и получите эту ошибку. Здесь решение идет.
Перейдите на package.json
и добавьте конфигурацию babel
. Если я не выгляжу таким щедрым, ниже приведен код
"babel": {
"presets": [
"react-app"
]
}
Оставьте настройку CRA без изменений. На самом деле CRA использует свое собственное предустановленное react-app
и то, что настроено в файле webpack.config.js
. Следовательно, нет необходимости в других пресетах.
Ответ 6
Или вы можете поместить свои пресеты в файл .babelrc в корне вашего проекта. Конечно, вам нужно сначала установить его.
/path/to/your/project/.babelrc
{ "presets": ["@babel/preset-env", "@babel/preset-react"] }