我试图运行一个简单的样板来进行react + webpack +热模块更换。但我实际上坚持使用babel / jsx步骤并需要帮助。我跟随this article。
目前我已经:
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"],
}
],
},
}
app/app.js
:
import React from "react";
import Greeting from "./greeting";
React.render(
<Greeting name="World"/>,
document.body
);
和app/greetings.js
:
import React from "react";
export default React.createClass({
render: function() {
return (
<div className="greeting">
Hello, {this.props.name}!
</div>
);
},
});
,这在package.json
:
"devDependencies": {
"babel-core": "^6.18.0",
"babel-loader": "^6.2.7",
"webpack": "^1.13.3"
},
"dependencies": {
"react": "^15.3.2"
}
当我在控制台中运行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 |
我是这个主题的新手,所以我不知道问题是什么,但肯定的是,webpack无法理解JSX语法。可能this part of the tutorial错误或过时:
幸运的是,Babel加载程序支持转换ES2015和JSX 意味着我们可以使用单个加载器而不是要求 babel-loader和jsx-loader。
我们可以使用以下命令安装babel加载程序:
npm install babel-loader --save-dev
如何修复webpack / jsx / babel设置?
答案 0 :(得分:2)
您需要使用babel预设来编译react
和其他ES6,ES7功能。
所需预设列表:
将此文件.babelrc
添加到您的根目录。
{
"presets": ["latest", "react", "stage-0"],
}
并执行此安装
npm install --save-dev babel-preset-latest babel-preset-react babel-preset-stage-0
现在,运行webpack。它应该工作!
答案 1 :(得分:0)
您需要安装Babel。这是编译jsx文件的关键。
首先安装它:
npm i -D @babel/preset-react @babel/preset-env @babel/core babel-loader @babel/plugin-proposal-class-properties
然后创建以下文件,并设置如下配置
/
.babelrc
webpack.config.js
.babelrc
文件:
{
"presets": [
[ "@babel/preset-env", {
"modules": false,
"targets": {
"browsers": [
"last 2 Chrome versions",
"last 2 Firefox versions",
"last 2 Safari versions",
"last 2 iOS versions",
"last 1 Android version",
"last 1 ChromeAndroid version",
"ie 11"
]
}
} ],
"@babel/preset-react"
],
"plugins": [ "@babel/plugin-proposal-class-properties" ]
}
webpack.config.js
文件:
module.exports = {
...
module: {
rules: [
{
test: /\.js?$/,
exclude: /node_module/,
use: 'babel-loader'
},
]
}
};
现在运行webpack。它必须工作正常。