使用webpack-devserver时ReactJS编译失败:Unexpected token错误
解决Webpack编译React时的Unexpected Token错误
我帮你排查了一下代码里的问题,这个Unexpected Token错误主要是因为Webpack+Babel的配置存在语法错误,再加上代码里的小疏忽导致JSX语法没被正确转译,咱们一步步来修复:
1. 修复webpack.config.js的语法错误
你的webpack配置文件里有两处关键语法问题:
module.rules应该是一个数组,你的配置里结构混乱,没有正确用数组包裹规则对象- Babel的
presets配置缺少外层数组包裹,语法不合法
修正后的webpack.config.js如下:
const webpack = require('webpack'); module.exports = { devtool: 'source-map', entry: { app: __dirname + '/src/App.jsx' }, output: { path: __dirname + '/dist', filename: 'app.bundle.js' }, module: { rules: [ { test: /\.jsx$/, exclude: /node_modules/, use: [ { loader: 'babel-loader', options: { presets: ["es2015", "stage-0", "react"] } } ] }, { test: /\.css$/, use: [ { loader: 'style-loader' }, { loader: 'css-loader', options: { modules: true } } ] } ] } };
2. 修复App.jsx的ReactDOM引入问题
你的代码最后调用了ReactDOM.render(),但没有引入ReactDOM模块,这会导致运行时错误,同时也可能影响Babel的转译判断。在App.jsx顶部添加引入:
import React, { Component } from 'react'; import ReactDOM from 'react-dom'; // 新增这一行 import './App.css'; import { BrowserRouter as Router, Route, Link} from 'react-router-dom'; class App extends Component { render() { return ( <Router> <div className="App"> <Route path='/' render={ ()=> { return (<h1> Welcome Home </h1> ) ; } }/> </div> </Router> ); } } ReactDOM.render(<App />, document.getElementById('root'));
3. 规范package.json的依赖分类(可选但推荐)
react和react-dom是生产环境必需的依赖,应该从devDependencies移到dependencies中:
{ "dependencies": { "react": "^16.3.2", "react-dom": "^16.3.2", "react-router-dom": "^4.2.2" }, "devDependencies": { "babel-cli": "^6.26.0", "babel-core": "^6.26.3", "babel-loader": "^7.1.4", "babel-polyfill": "^6.26.0", "babel-preset-es2015": "^6.24.1", "babel-preset-es2015-node4": "^2.1.1", "babel-preset-react": "^6.24.1", "babel-preset-stage-0": "^6.24.1", "babel-register": "^6.26.0" } }
做完这些修改后,重新启动webpack-dev-server,应该就能正常编译了。核心问题是Webpack配置里的语法错误导致Babel没有正确处理JSX语法,从而抛出Unexpected Token错误。
内容的提问来源于stack exchange,提问作者HoCo_
相关产品推荐
相关产品推荐

