javascript - Webpack 抛出 JSX 语法错误

标签 javascript reactjs webpack babeljs

当我尝试使用 webpack 编译我的 React jsx 代码时,收到以下错误:

ERROR in ./client/index.js
Module parse failed: C:\Users\Gum-Joe\Documents\Projects\bedel/client\index.js Unexpected token (6:11)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected token (6:11)
    at Parser.pp.raise (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:920:13)
    at Parser.pp.unexpected (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:1483:8)
    at Parser.pp.parseExprAtom (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:330:12)
    at Parser.pp.parseExprSubscripts (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:225:19)
    at Parser.pp.parseMaybeUnary (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:204:17)
    at Parser.pp.parseExprOps (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:151:19)
    at Parser.pp.parseMaybeConditional (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:133:19)
    at Parser.pp.parseMaybeAssign (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:110:19)
    at Parser.pp.parseExpression (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:86:19)
    at Parser.pp.parseReturnStatement (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:1854:26)
    at Parser.pp.parseStatement (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:1719:19)
    at Parser.pp.parseBlock (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:1991:21)
    at Parser.pp.parseFunctionBody (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:607:22)
    at Parser.pp.parseMethod (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:576:8)
    at Parser.pp.parseClassMethod (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:2137:23)
    at Parser.pp.parseClass (C:\Users\Gum-Joe\Documents\Projects\bedel\node_modules\acorn\dist\acorn.js:2122:10)
 @ ./client/index.js 1:0-20

.babelrc:

{
  "presets": ["es2015", "react"]
}

webpack.config.js:

// Webpack config
const path = require('path');
const webpack = require('webpack');
const HtmlWebpackPlugin = require('html-webpack-plugin');
module.exports = {

  // Use client as our root
  context: __dirname + "/client",
  // Entry file
  entry: "./index.js",
  // Resolve
  resolve: {
    extensions: ['', '.js', '.jsx']
  },
  // Output to /build
  output: {
        path: path.join(__dirname, "build", "js"),
        filename: "bundle.js"
    },
  loaders: [
    { test: /\.jsx$/, exclude: /node_modules/, loader: "babel-loader" }
  ],
  // Plugins
  plugins: [
    // HTML
    new HtmlWebpackPlugin({
      title: 'Bedel',
      filename: path.join(__dirname, 'views', 'index.ejs'),
      template: path.join(__dirname, 'client', 'templates', 'index.ejs')
    })
  ]
};

index.js:

import React from 'react';
import ReactDOM from 'react-dom';

class App extends React.Component {
  render () {
    return <p> Hello React</p>;
  }
}

ReactDOM.render(<App/>, document.getElementById('app'));

我已经安装了所有需要的 babel 预设,以及 babel-core 。 我已经看过以下答案:

编辑:注释掉我的 jsx 语法后,输出 bundle.js似乎没有被 babel 转换(即我可以在其中看到 ES6 代码)

编辑:很抱歉给您带来不便,但是app.jsx是我尝试过的一个解决方案,涉及将逻辑放在 index.js 中到一个单独的文件中。

编辑:以下是我尝试过但不起作用的解决方案的列表:

  • 复制.babelrcclient/.babelrc
  • 将测试更改为测试 .js而不是.js
  • 将应用逻辑分离到单独的文件中 ( app.js )
  • 在 webpack 配置中使用预设

此外,我已将代码推送到我的 GitHub 存储库 ( https://github.com/Gum-Joe/bedel )。随意看看吧。

最佳答案

您将加载器配置为仅通过 Babel 传递 .jsx 文件:

test: /\.jsx$/

但是,您的文件的扩展名为 .js。重命名文件或将测试表达式更新为 /\.jsx?$/

除了更新test之外,您还需要将.babel.rc重命名为.babelrc(没有rc之前)。否则 Babel 认为没有配置文件,不会加载任何预设。

关于javascript - Webpack 抛出 JSX 语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37443432/

相关文章:

javascript - WebPack:多个入口点,无需额外 block

node.js - 如何在nodejs中导入webpack目标生成的 `main`以外的其他文件?

javascript - socket.io 聊天示例 - 表单提交问题

javascript - ReactJS : Only render element if array has values

javascript - axios 和响应数据集拆分到多个数组

javascript - 仅渲染组件一次的逻辑

javascript - 从用户脚本将独立于样式的 jQuery UI 对话框添加到 DOM

javascript - 尝试执行 $.getJSON 调用时出现 404 not found 错误

javascript - 删除运算符(operator)困惑

javascript - 处理与 WebPack 连接有关的文件顺序?