无论我尝试什么,Webpack 都不会解析 JSX

Webpack won't parse JSX no matter what I try

已经研究了几天...

尝试使用 Webpack 延迟加载 React 模块,app-shell 首先在服务器上呈现,然后在客户端注入 Router。使用 gulp 时编译正常,但使用 Webpack 时,我得到了臭名昭著的:

错误../server/components/routes/AppRouter.jsx 模块解析失败:/web/sites/react-lazy/server/components/routes/AppRouter.jsx 意外令牌 (11:6) 您可能需要一个合适的加载器来处理这种文件类型。

AppRouter.jsx:

import React from 'react';
import { Router, Route, IndexRoute } from 'react-router';
import routes from './AppRoute.jsx';
import createMemoryHistory from 'history/lib/createMemoryHistory';

if (typeof require.ensure !== 'function') require.ensure = (d, c) => c(require)

export default class AppRouter extends React.Component {
  render() {
    return (
      <Router routes={routes} history={createMemoryHistory()} /> // < -- errors here
    ); 
  }
}

我的webpack.config.js:

var path = require('path')

module.exports = {
  context: __dirname + "/src",
  entry: './js/app.es6.js',
  resolve: {
    extensions: ['', '.js', '.jsx']
  },
  module: {
    loaders: [ 
      {
        test: /\.jsx?$/,
        loader: 'babel-loader',
        include: path.resolve(__dirname, 'src/js'),
        exclude: /(node_modules)/,
        query: {
          presets: ["es2015", "stage-0", "react"],
        }
      }
    ]
  },

  output: {
    path: __dirname + '/build',
    publicPath: '/build',
    filename: 'app.js',
    chunkFilename: '[id].chunk.js',
  }
}

我的目录结构:

  /
    webpack.config.js
    .babelrc
    /src
       /js
          app.es6.js
          .babelrc // <-- also put a .babelrc here in case 

我的package.json:

  "devDependencies": {
    "babel": "^6.5.2",
    "babel-core": "^6.14.0",
    "babel-loader": "^6.2.5",
    "babel-preset-es2015": "^6.14.0",
    "babel-preset-react": "^6.11.1",
    "babel-preset-stage-0": "^6.5.0",
    "babel-register": "^6.14.0", 
    "webpack": "^1.13.2",
    ...
 }

我试过:

我应该说,我对 React 和 webpack 还很陌生。有人知道其他技巧吗?

解法:

您的条目文件使用位于此处的组件:

/web/sites/react-lazy/server/components/

但是,您的 include 配置只允许将低于 /web/sites/react-lazy/src/js/ 的文件传递给加载程序(include 表示:"any files that should be passed to this loader must be located in this directory")。

因此,要么删除 include 配置,要么使其成为一个数组,其中还包含可以找到 .jsx 文件的其他位置。