[英]React error when compiling with webpack
I have the following: 我有以下内容:
import React from 'react';
import Router from 'react-router';
import { DefaultRoute, Link, Route, RouteHandler } from 'react-router';
import LoginHandler from './components/Login.js';
let App = React.createClass({
render() {
return (
<div className="nav">
<Link to="app">Home</Link>
<Link to="login">Login</Link>
{/* this is the importTant part */}
<RouteHandler/>
</div>
);
}
});
let routes = (
<Route name="app" path="/" handler={App}>
<Route name="login" path="/login" handler={LoginHandler}/>
</Route>
);
Router.run(routes, function (Handler) {
React.render(<Handler/>, document.body);
});
when I run "npm start" based on my config: 当我根据我的配置运行“npm start”时:
var webpack = require('webpack');
module.exports = {
entry: [
'webpack/hot/only-dev-server',
"./js/app.js"
],
output: {
path: __dirname + '/build',
filename: "bundle.js"
},
module: {
loaders: [
{ test: /\.js?$/, loaders: ['react-hot', 'babel'], exclude: /node_modules/ },
{ test: /\.js$/, exclude: /node_modules/, loader: 'babel-loader'},
{ test: /\.css$/, loader: "style!css" }
]
},
plugins: [
new webpack.HotModuleReplacementPlugin(),
new webpack.NoErrorsPlugin()
]
};
I get the following error: 我收到以下错误:
./js/app.js
Module build failed: SyntaxError: /Users/alessandrosantese/Documents/PROJECTS/react-router-16/js/app.js: Unexpected token (10:6)
8 | render() {
9 | return (
> 10 | <div className="nav">
| ^
11 | <Link to="app">Home</Link>
12 | <Link to="login">Login</Link>
13 |
I think you want both .js
and .jsx
to be run through react-hot
and babel
, but your pattern matches .j
or .js
(I think that you assumed that ?
is a wildcard character, but in regular expressions it means "match the preceding expression 0 or 1 time" ). 我想你想要.js
和.jsx
都通过react-hot
和babel
来运行,但你的模式匹配.j
或.js
(我认为你认为?
是一个通配符,但在正则表达式中它意味着“匹配”前面的表达式0或1次“ )。
Try this: 尝试这个:
test: /\.jsx?$/
I would suggest you two changes. 我建议你做两个改动。
First: 第一:
In your webpack with react-hot
and babel loader
you need to transpile jsx. 在您的带react-hot
和babel loader
webpack中,您需要转换jsx。 So change your test to 所以改变你的测试
{ test: /\.jsx?$/, loaders: ['react-hot', 'babel'], exclude: /node_modules/ },
To check for both .js
and .jsx
. 检查.js
和.jsx
。
Second: 第二:
Instead of React.render()
use ReactDOM.render()
. 而不是React.render()
使用ReactDOM.render()
。
import React from 'react';
import ReactDOM from 'react-dom';
import Router from 'react-router';
import { DefaultRoute, Link, Route, RouteHandler } from 'react-router';
import LoginHandler from './components/Login.js';
let App = React.createClass({
render() {
return (
<div className="nav">
<Link to="app">Home</Link>
<Link to="login">Login</Link>
{/* this is the importTant part */}
<RouteHandler/>
</div>
);
}
});
let routes = (
<Route name="app" path="/" handler={App}>
<Route name="login" path="/login" handler={LoginHandler}/>
</Route>
);
Router.run(routes, function (Handler) {
ReactDOM.render(<Handler/>, document.body);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.