webpack babel loader 无法编译 jsx

duc*_*cin 5 javascript reactjs webpack babeljs

我正在尝试运行一个简单的样板来进行 React + Webpack + 热模块替换。但我实际上陷入了 babel/jsx 步骤并需要帮助。我正在关注这篇文章

目前我有:

webpack.config.js

module.exports = {
  context: __dirname + "/app",
  entry: "./app.js",

  output: {
    filename: "app.js",
    path: __dirname + "/dist",
  },

  module: {
    loaders: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loaders: ["babel-loader"],
      }
    ],
  },
}
Run Code Online (Sandbox Code Playgroud)

app/app.js

import React from "react";
import Greeting from "./greeting";

React.render(
  <Greeting name="World"/>,
  document.body
);
Run Code Online (Sandbox Code Playgroud)

app/greetings.js

import React from "react";

export default React.createClass({
  render: function() {
    return (
      <div className="greeting">
        Hello, {this.props.name}!
      </div>
    );
  },
});
Run Code Online (Sandbox Code Playgroud)

这在package.json

  "devDependencies": {
    "babel-core": "^6.18.0",
    "babel-loader": "^6.2.7",
    "webpack": "^1.13.3"
  },
  "dependencies": {
    "react": "^15.3.2"
  }
Run Code Online (Sandbox Code Playgroud)

当我在控制台中运行时webpack,正如教程所说,它应该运行 webpack (以及下面的 babel)并捆绑整个应用程序,但它没有 - 相反,它会抛出以下错误:

$ webpack
Hash: 9a56cc72acac2de6f40c
Version: webpack 1.13.3
Time: 543ms
    + 1 hidden modules

ERROR in ./app.js
Module build failed: SyntaxError: C:/Users/abc/Tests/webpack-react-hmr/app/app.js: Unexpected token (7:2)

   5 |
   6 | React.render(
>  7 |   <Greeting name="World"/>,
     |   ^
   8 |   document.body
   9 | );
  10 |
Run Code Online (Sandbox Code Playgroud)

我是这个主题的新手,所以我不知道问题是什么,但可以肯定的是,webpack 无法理解 JSX 语法。也许教程的这一部分是错误的或过时的:

幸运的是,Babel 加载器支持转换 ES2015 和 JSX,这意味着我们可以使用单个加载器,而不需要同时使用 babel-loader 和 jsx-loader。

我们可以使用以下命令安装 babel loader:

npm install babel-loader --save-dev
Run Code Online (Sandbox Code Playgroud)

我应该怎么做才能修复 webpack/jsx/babel 设置?

Pra*_*avi 3

您需要 babel 预设来编译react和其他 ES6、ES7 功能。

所需预设列表:

  1. 最新的
  2. 反应
  3. 阶段0

将此文件添加.babelrc到您的根目录。

{
 "presets": ["latest", "react", "stage-0"],
}
Run Code Online (Sandbox Code Playgroud)

并进行安装

npm install --save-dev babel-preset-latest babel-preset-react babel-preset-stage-0
Run Code Online (Sandbox Code Playgroud)

现在,运行 webpack。它应该有效!