React、babel、webpack 不解析 jsx 代码
React, babel, webpack not parsing jsx code
webpack.config.js
module.exports = {
context: __dirname + "/app",
entry: {
javascript: "./app.js",
html: "./index.html",
},
resolve: {
extensions: ['', '.js', '.jsx']
},
output: {
filename: "app.js",
path: __dirname + "/dist",
},
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: "babel-loader",
},
{
test: /\.html$/,
loader: "file?name=[name].[ext]",
},
],
},
}
package.json
{
"name": "react-webpack-project",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"babel": "^6.0.15",
"babel-core": "^6.0.20",
"babel-loader": "^6.0.1",
"file-loader": "^0.8.4",
"webpack": "^1.12.2"
},
"dependencies": {
"react": "^0.14.2"
}
}
app/app.js
import React from "react";
import Greeting from "./greeting";
React.render(
<Greeting name="World"/>,
document.body
);
我在四处搜索后看到了完全相同的问题,但 none 的答案似乎适用于我。 运行 webpack
时出现以下错误:
错误./app.js
模块构建失败:SyntaxError: path/to/project/react-webpack-project/app/app.js: Unexpected token (5:2)
React.render(
<Greeting name="World"/>,
document.body
);
我不确定为什么我仍然收到此错误。我猜它与我的 webpack.config.js 文件有关,但不是 100% 的问题所在。
首先:如果您使用的是 React v^0.14,则应使用 React-Dom 呈现您的代码。 https://www.npmjs.com/package/react-dom
其次,这应该可以解决您的问题:
您需要将预设添加到 babel-loader:
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: "babel-loader",
presets: ['es2015', 'react']
},
我目前使用的是 React 0.14.3。 ReactDOM 解决方案不起作用,也没有将 babel 预设添加到 webpack.config.js。基本上,这些解决方案似乎只有在定义了单个加载程序时才有效,但我同时拥有 babel-loader 和 react-hot 加载程序。
DID 的工作是安装 babel react 预设模块:
npm install babel-preset-react
然后使用以下内容在我的项目目录中创建一个 .babelrc 文件:
{
"presets": ['react']
}
这记录在 http://babeljs.io/docs/plugins/preset-react/, as pointed to by Abhinav Singi
这帮助我解决了这个问题。
在同一目录 webpack.config.js 上创建新文件 .babelrc
。将此添加到 .babelrc
{
"stage": 2,
"env": {
"development": {
"plugins": [
"react-display-name",
"react-transform"
],
"extra": {
"react-transform": {
"transforms": [{
"transform": "react-transform-hmr",
"imports": ["react"],
"locals": ["module"]
}]
}
}
}
}
}
对我来说,答案是在查询块中包含预设:
query: {
presets: ['react', 'es2015']
}
webpack.config.js
module.exports = {
context: __dirname + "/app",
entry: {
javascript: "./app.js",
html: "./index.html",
},
resolve: {
extensions: ['', '.js', '.jsx']
},
output: {
filename: "app.js",
path: __dirname + "/dist",
},
module: {
loaders: [
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: "babel-loader",
},
{
test: /\.html$/,
loader: "file?name=[name].[ext]",
},
],
},
}
package.json
{
"name": "react-webpack-project",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"babel": "^6.0.15",
"babel-core": "^6.0.20",
"babel-loader": "^6.0.1",
"file-loader": "^0.8.4",
"webpack": "^1.12.2"
},
"dependencies": {
"react": "^0.14.2"
}
}
app/app.js
import React from "react";
import Greeting from "./greeting";
React.render(
<Greeting name="World"/>,
document.body
);
我在四处搜索后看到了完全相同的问题,但 none 的答案似乎适用于我。 运行 webpack
时出现以下错误:
错误./app.js
模块构建失败:SyntaxError: path/to/project/react-webpack-project/app/app.js: Unexpected token (5:2)
React.render(
<Greeting name="World"/>,
document.body
);
我不确定为什么我仍然收到此错误。我猜它与我的 webpack.config.js 文件有关,但不是 100% 的问题所在。
首先:如果您使用的是 React v^0.14,则应使用 React-Dom 呈现您的代码。 https://www.npmjs.com/package/react-dom
其次,这应该可以解决您的问题:
您需要将预设添加到 babel-loader:
{
test: /\.jsx?$/,
exclude: /node_modules/,
loader: "babel-loader",
presets: ['es2015', 'react']
},
我目前使用的是 React 0.14.3。 ReactDOM 解决方案不起作用,也没有将 babel 预设添加到 webpack.config.js。基本上,这些解决方案似乎只有在定义了单个加载程序时才有效,但我同时拥有 babel-loader 和 react-hot 加载程序。
DID 的工作是安装 babel react 预设模块:
npm install babel-preset-react
然后使用以下内容在我的项目目录中创建一个 .babelrc 文件:
{
"presets": ['react']
}
这记录在 http://babeljs.io/docs/plugins/preset-react/, as pointed to by Abhinav Singi
这帮助我解决了这个问题。
在同一目录 webpack.config.js 上创建新文件 .babelrc
。将此添加到 .babelrc
{
"stage": 2,
"env": {
"development": {
"plugins": [
"react-display-name",
"react-transform"
],
"extra": {
"react-transform": {
"transforms": [{
"transform": "react-transform-hmr",
"imports": ["react"],
"locals": ["module"]
}]
}
}
}
}
}
对我来说,答案是在查询块中包含预设:
query: {
presets: ['react', 'es2015']
}