简体   繁体   English

使用webpack进行编译时出现反应错误

[英]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-hotbabel来运行,但你的模式匹配.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-hotbabel 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM