带有 ReactJS、Webpack 和 Babel 的 Hello World
Posted
技术标签:
【中文标题】带有 ReactJS、Webpack 和 Babel 的 Hello World【英文标题】:Hello World with ReactJS, Webpack and Babel 【发布时间】:2019-03-19 19:07:28 【问题描述】:我想用 React 打印简单的 Hello World。这是我的应用程序目录结构:
webpack.config.js
const path = require('path');
module.exports =
entry:
app: './js/app.js'
,
output:
filename: 'bundle.js',
path: path.resolve(__dirname, 'build')
,
module:
loaders: [
test: /\.js$/,
loader: 'babel-loader',
query:
presets: ['es2015', 'react']
]
,
stats:
colors: true
,
devtool: 'source-map'
;
js/app.js
var React = require('react');
var ReactDOM = require('react-dom');
ReactDOM.render(
<h1>Hello, world!</h1>,
document.getElementById('root')
);
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link href='http://fonts.googleapis.com/css?family=Roboto:400,300,700' rel='stylesheet' type='text/css'>
<link href="css/styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<div id="root"></div>
<script src="build/app.bundle.js"></script>
</body>
</html>
package.json
"name": "es6-tutorial-react",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts":
"test": "echo \"Error: no test specified\" && exit 1",
"webpack": "webpack --mode=development"
,
"repository":
"type": "git",
"url": "git+https://github.com/ccoenraets/es6-tutorial-react.git"
,
"author": "",
"license": "ISC",
"bugs":
"url": "https://github.com/ccoenraets/es6-tutorial-react/issues"
,
"homepage": "https://github.com/ccoenraets/es6-tutorial-react#readme",
"devDependencies":
"@babel/core": "^7.1.2",
"@babel/preset-env": "^7.1.0",
"@babel/preset-react": "^7.0.0",
"babel-core": "^6.26.3",
"babel-loader": "^8.0.4",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1",
"react": "^16.5.2",
"react-dom": "^16.5.2",
"webpack": "^4.20.2",
"webpack-cli": "^3.1.2"
当我运行npm run webpack
时,它返回错误:
配置对象无效。 Webpack 已使用 与 API 架构不匹配的配置对象。 - configuration.module 有一个未知的属性 'loaders'。这些属性是有效的:object defaultRules?, exprContextCritical?, exprContextRecursive?, exprContextRegExp?, exprContextRequest?, noParse?, rules?, strictExportPresence?, strictThisContextOnImports?, unknownContextCritical?, unknownContextRecursive?, unknownContextRegExp?, unknownContextRequest?, unsafeCache?, WrappedContextCritical?, WrappedContextRecursive?, WrappedContextRegExp? -> 影响正常模块的选项 (
NormalModuleFactory
)。 npm 错误!代码 ELIFECYCLE npm 错误!错误号 1 npm 呃! es6-tutorial-react@1.0.0 webpack:webpack --mode=development
npm 错误!退出状态 1 npm ERR! npm 错误!失败了 es6-tutorial-react@1.0.0 webpack 脚本。 npm 错误!这可能不是 npm 的问题。上面可能还有额外的日志输出。npm 错误!可以在以下位置找到此运行的完整日志:npm ERR! C:\Users\User\AppData\Roaming\npm-cache_logs\2018-10-15T10_57_59_640Z-debug.log
请。帮忙谢谢。
【问题讨论】:
【参考方案1】:正如@Dominic 所说,使用rules
属性而不是立即使用loaders
。如下所示:
...
module:
rules: [
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use:
loader: 'babel-loader',
options:
presets: ['@babel/preset-env', '@babel/preset-react']
]
,
...
您必须修复的另一件事是在您的index.html
:
Change this: <script src="build/app.bundle.js"></script>
To this: <script src="build/bundle.js"></script>
因为在 webpack.config.js 中,您已将输出文件名指定为 bunlde.js
,而不是 app.bundle.js
。
希望有所帮助!
【讨论】:
【参考方案2】:您正在使用来自 webpack v3 的代码,但已安装 webpack v4。 Loaders 在 v4 中被称为rules
。而是遵循最新指南:https://webpack.js.org/guides/getting-started/ 或 https://www.valentinog.com/blog/react-webpack-babel/ 等
您还安装了来自 @babel
的新预设,因此请确保您的 .babelrc 是正确的,并且也不要遵循一些旧的
【讨论】:
【参考方案3】:降低版本,你的问题就解决了。
"babel-cli": "^6.26.0",
"babel-core": "^6.26.3",
"babel-eslint": "^8.2.3",
"babel-loader": "^7.1.4",
"babel-preset-env": "^1.7.0",
"babel-preset-react": "^6.24.1",
【讨论】:
以上是关于带有 ReactJS、Webpack 和 Babel 的 Hello World的主要内容,如果未能解决你的问题,请参考以下文章
带有 ReactJS 和 Webpack 的 Firebase FCM 无法正常工作:我们无法注册默认服务工作者
带有热重载的 ReactJS 服务器端渲染 (webpack-dev-server)
ReactJS 和 Webpack 模块联合应用程序在部署到云端时包含未定义的 url
如何使用带有羽毛/快递的 webpack-dev-middleware?