【问题标题】:Hello World with ReactJS, Webpack and Babel带有 ReactJS、Webpack 和 Babel 的 Hello World
【发布时间】: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

请。帮忙谢谢。

【问题讨论】:

    标签: reactjs npm webpack babeljs


    【解决方案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",
        

        【讨论】:

          猜你喜欢
          • 2017-05-29
          • 2016-05-15
          • 2020-04-15
          • 2022-01-10
          • 2021-03-21
          • 2019-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多