首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用React时,Webpack模块出现解析错误

使用React时,Webpack模块出现解析错误
EN

Stack Overflow用户
提问于 2016-07-21 21:14:25
回答 1查看 546关注 0票数 0

当我尝试运行我的Webpack配置时,它失败了,并出现以下错误:

代码语言:javascript
复制
$ webpack
Hash: 826e21c818de1882d366
Version: webpack 1.13.1
Time: 53ms
   [0] ./public/js/react/swap-shop.js 0 bytes [built] [failed]

ERROR in ./public/js/react/swap-shop.js
Module parse failed: /Users/work/Development/group-2/public/js/react/swap-shop.js Unexpected token (23:6)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (23:6)
    at Parser.pp.raise (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:923:13)
    at Parser.pp.unexpected (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:1490:8)
    at Parser.pp.parseExprAtom (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:333:12)
    at Parser.pp.parseExprSubscripts (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:228:19)
    at Parser.pp.parseMaybeUnary (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:207:17)
    at Parser.pp.parseExprOps (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:154:19)
    at Parser.pp.parseMaybeConditional (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:136:19)
    at Parser.pp.parseMaybeAssign (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:112:19)
    at Parser.pp.parseParenAndDistinguishExpression (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:376:28)
    at Parser.pp.parseExprAtom (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:307:19)
    at Parser.pp.parseExprSubscripts (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:228:19)
    at Parser.pp.parseMaybeUnary (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:207:17)
    at Parser.pp.parseExprOps (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:154:19)
    at Parser.pp.parseMaybeConditional (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:136:19)
    at Parser.pp.parseMaybeAssign (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:112:19)
    at Parser.pp.parseExpression (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:88:19)
    at Parser.pp.parseReturnStatement (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:1872:26)
    at Parser.pp.parseStatement (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:1737:19)
    at Parser.pp.parseBlock (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:2009:21)
    at Parser.pp.parseFunctionBody (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:610:22)
    at Parser.pp.parseMethod (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:579:8)
    at Parser.pp.parseClassMethod (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:2155:23)
    at Parser.pp.parseClass (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:2140:10)
    at Parser.pp.parseStatement (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:1733:19)
    at Parser.pp.parseTopLevel (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:1666:21)
    at Parser.parse (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:1632:17)
    at Object.parse (/Users/work/Development/group-2/node_modules/webpack/node_modules/acorn/dist/acorn.js:885:44)
    at Parser.parse (/Users/work/Development/group-2/node_modules/webpack/lib/Parser.js:902:15)
    at DependenciesBlock.<anonymous> (/Users/work/Development/group-2/node_modules/webpack/lib/NormalModule.js:104:16)
    at DependenciesBlock.onModuleBuild (/Users/work/Development/group-2/node_modules/webpack/node_modules/webpack-core/lib/NormalModuleMixin.js:310:10)

我不确定为什么会发生这种情况,以下是我的配置:

代码语言:javascript
复制
var debug = process.env.NODE_ENV !== "production";
var webpack = require('webpack');

module.exports = {
  context: __dirname,
  devtool: debug ? "inline-sourcemap" : null,
  entry: "./public/js/react/swap-shop.js",
  output: {
    path: __dirname + "/dist",
    filename: "scripts.min.js"
  },
  plugins: debug ? [] : [
    new webpack.optimize.DedupePlugin(),
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false }),
  ],
};

然后我有了我实际上想要捆绑的React组件,下面是swap-shop.js文件

代码语言:javascript
复制
import VehicleList from './components/vehicle-list.js';

class VehicleContainer extends React.Component {

  constructor(props) {
    super(props);

    this.state = { vehicles: [] };

  }

  componentWillMount() {

    // Make a request for vehicle data

    axios.get('/api/models')
    .then(response => this.setState({ vehicles: response.data }))
    .catch(error => console.log(error));
  }
  render() {
                console.log(this.state.vehicles);
    return (
      <VehicleList vehicles={this.state.vehicles}/>
    )
  }
};

ReactDOM.render(
  <VehicleContainer />,
  document.getElementById('swap-shop-range').getElementsByClassName('react-target')[0]
);

然后我有了我的VehicleList组件:

代码语言:javascript
复制
// Vehicle List Componen
import VehicleDetail from './vehicle-detail';
// Create our component
let VEHICLES = [
  {make: 'Volkswagen', model: 'Golf', image: 'https://s3-eu-west-1.amazonaws.com/pulman-vw-images/uploads/images/thumbnails/a4a40021d1661b474e42ad3aa0419d940601b27f.png'}
];
const VehicleList = (props) => {
  // Just add props.vehicle to access API data instead of static
  const RenderedVehicles = VEHICLES.map(vehicle =>
    <VehicleDetail key={vehicle.make} vehicle={vehicle} />
  );

  return (
    <div className="row-flex center-xs">
      {RenderedVehicles}
    </div>
  );
};

// Export our component
export default VehicleList;

最后是我的VehicleDetail组件:

代码语言:javascript
复制
// Vehicle Description Component

const VehicleDetail = (props) => {
  return (
    <div className="col-flex-md-3 col-flex-sm-4 col-flex-xs-6 col-flex-media-query">
      <div className="vehicle-container">
        <img src={props.vehicle.image} />
        <h4 className="vehicle-title">
          {props.vehicle.make}
          <span>{props.vehicle.model}</span>
        </h4>
        <div className="row-flex">
          <div className="col-flex-xs-6 btn-container">
            <a href="/offers/citigo-colour-edition" className="learn-more-btn">Learn More</a>
          </div>
          <div className="col-flex-xs-6 btn-container">
            <a href="/offers/citigo-colour-edition/make-enquiry" className="test-drive-btn">Test Drive</a>
          </div>
        </div>
      </div>
    </div>
  );
};

// Export our component
export default VehicleDetail;

我的React组件层次结构:

代码语言:javascript
复制
public/js/react/

  swap-shop.js

  components/

    vehicle-detail.js
    vehicle-list.js

然后,我简单地将React、ReactDOM和Babel包含在包含React代码的脚本标记上方的页面中。当我使用一个内联脚本标记将所有组件粘贴到实际的html页面中时,它们似乎可以正常工作,但是,当我尝试将它们与webpack捆绑在一起时,由于某种原因,我得到了这个错误。你知道为什么会发生这种事吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 22:46:36

你可能需要babel-loader,babel-preset-es2015和babel-preset-react

代码语言:javascript
复制
module.exports = {
  context: __dirname,
  devtool: debug ? "inline-sourcemap" : null,
  entry: "./public/js/react/swap-shop.js",
  output: {
    path: __dirname + "/dist",
    filename: "scripts.min.js"
  },
  module: {
    loaders: [
        {
            test: /\.js$/,
            exclude: /(node_modules|bower_components)/,
            loader: 'babel-loader',
            query: {
               presets: ['es2015']
            }
        }
   ]},
  plugins: debug ? [] : [
    new webpack.optimize.DedupePlugin(),
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({ mangle: false, sourcemap: false      })]};

阅读更多https://www.twilio.com/blog/2015/08/setting-up-react-for-es6-with-webpack-and-babel-2.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38505300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档