问题
Why am I getting this error below? My statement ReactDOM.render(<App />, container);
is 100% legit code.
My github repo: https://github.com/leongaban/react_starwars
The app.js file
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);
The components/App file
import React from 'react'
const App = () =>
<div className='container'>
<div className='row'>
</div>
<div className='row'>
</div>
</div>;
export default App;
My 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:
Use this as your webpack config file
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(),
]
};
You are missing the presets
回答2:
I was getting the same error, and I simply needed to add a .babelrc file to the route of the project (same location as package.json) containing the following:
{
"presets": [
"env",
"react"
],
"plugins": [
"transform-class-properties"
]
}
回答3:
Install babel-preset-react for jsx syntax.
npm install babel-preset-react
presets
loaders: [{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: ['react', 'es2015']
}
}
]
回答4:
Try adding the resolve
property to your webpack config file:
resolve: {
extensions: ['.js', '.jsx']
},
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loaders: ["babel-loader"]
}
]
}
回答5:
Or you can put your presets in .babelrc file in the root of your project. Of course you need to install it first.
Like this
/path/to/your/project/.babelrc
{
"presets": ["@babel/preset-env", "@babel/preset-react"]
}
回答6:
If someone is working with CRA and get this error. Here the solution goes.
Goto package.json
and add babel
config. If I'm not seeming so generous, below is the code
"babel": {
"presets": [
"react-app"
]
}
Keep rest of CRA setup as it is. Actually CRA uses it's own custom preset react-app
and that's what is setup in webpack.config.js
file. Hence no need for other presets.
来源:https://stackoverflow.com/questions/44267369/reactjs-module-build-failed-syntaxerror-unexpected-token-reactdom-render