【问题标题】:Cannot start react module无法启动反应模块
【发布时间】:2018-04-15 10:51:36
【问题描述】:

启动 npm 时出现以下异常。

配置对象无效。 Webpack 已使用与 API 模式不匹配的配置对象进行初始化。 - configuration.module 有一个未知的属性 'loaders'。这些属性是有效的: object { exprContextCritical?, exprContextRecursive?, exprContextRegExp?, exprContextRequest?, noParse?, rules?, defaultRules?, unknownContextCritical?, unknownContextRecursive?, unknownContextRegExp?, unknownContextRequest?, unsafeCache?, WrappedContextCritical?, WrappedContextRecursive?, WrappedContextRegExp?, strictExportPresence?, strictThisContextOnImports? } -> 影响正常模块的选项(NormalModuleFactory)。

var path= require('path');

module.exports = {
  entry : './script.jsx',
  output : {
    path : path.resolve(__dirname,''),
    filename: 'transpiled.js'
  },
  module : {
    loaders: [
      {
      test:/\.jsx?$/,
      loaders:'babel-loader',
      exclude : /node_modules/,
      query : {
        presets : ['es2015','react']
      }
    }
  ]
}
}

更新后代码正在运行,但反应组件没有在屏幕上呈现。

//Update
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Test title</title>
</head>
<body>
  <div id ="content">
      <h1>This is the demo of your web page</h1>
  </div>
  <script src ="transpiled.js"></script>
</body>
</html>

//webpack config
var path= require('path');

module.exports = {
  entry : './script.jsx',
  output : {
    path : path.resolve(__dirname,'react/index.html'),
    filename: 'transpiled.js'
  },
  module : {
    rules: [ // rules rules
        {
          test: /\.jsx?$/,
          loaders: 'babel-loader',
          //use:'babel-loader', // use here
          exclude : /node_modules/,
          query : {
            presets : ['es2015','react']
          }
        }
      ]
}
}

//script.jsx
import React from 'react';
import ReactDOM from 'react-dom';

class MyComponent extends React.Component {
  render() {
      return (
          <h2>Hello World !!!</h2>
      );
  }
}

ReactDom.render(
  <MyComponent/>,document.getElementById('content')
);

//package.json
{
  "name": "reactjs",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "it": "webpack-dev-server --hot"
  },
  "author": "chetan",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.4",
    "babel-preset-es2015": "^6.24.1",
    "babel-preset-react": "^6.24.1",
    "webpack": "^4.5.0",
    "webpack-cli": "^2.0.14",
    "webpack-dev-middleware": "^3.1.2",
    "webpack-dev-server": "^3.1.3",
    "webpack-hot-middleware": "^2.21.2"
  },
  "dependencies": {
    "react": "^16.3.1",
    "react-dom": "^16.3.1",
    "webpack-sources": "^1.1.0"
  }
}

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    您需要将关键字loaders 替换为关键字rules。并在每个规则对象中将loaders 替换为关键字use。

    module.exports = {
      entry : './script.jsx',
      output : {
        path : path.resolve(__dirname,''),
        filename: 'transpiled.js'
      },
      module : {
        rules: [ // rules rules
          {
            test:/\.jsx?$/,
            use:'babel-loader', // use here
            exclude : /node_modules/,
            query : {
              presets : ['es2015','react']
            }
          }
        ]
      }
    }
    

    编辑

    现在你的组件没有呈现在屏幕上,因为 webpack 配置中的 output.path 不正确。应该是这样的:

    output : {
       path : path.resolve(__dirname),
       filename: 'transpiled.js'
    }
    

    因为项目根目录中的 html 引用中的脚本标记:

    <script src="transpiled.js"></script>
    

    【讨论】:

    • 任何使用关键字的例子?
    • 查看我的答案中的代码,我添加了替换的注释
    • 谢谢,现在我的代码正在运行,但是反应组件没有被加载,我已经更新了问题
    • 此警告存在:资产大小限制中的警告:以下资产超出建议的大小限制 (244 KiB)。
    • 好的,我看到错误了,我更新我的答案,请看一下
    【解决方案2】:

    您的webpack.config 文件格式错误

    var path = require('path');
    
    module.exports = {
        entry: './script.jsx',
        output: {
            path: path.resolve(__dirname, ''),
            filename: 'transpiled.js'
        },
        module: {
            rules: [
                {
                    test: /\.jsx?$/,
                    loaders: 'babel-loader',
                    exclude: /node_modules/,
                    use: [
                        {
                            loader: 'babel-loader',
                            options: {
                                presets: [
                                    '@babel/preset-env',
                                    // your preset
                                ]
                            }
                        }
                    ]
                }
            ]
        }
    }
    

    查看更多here

    【讨论】:

      猜你喜欢
      • 2019-12-01
      • 2015-05-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 2022-06-30
      • 2019-04-23
      • 1970-01-01
      相关资源
      最近更新 更多