【问题标题】:webpack : Uncaught ReferenceError: require is not definedwebpack:未捕获的 ReferenceError:未定义要求
【发布时间】:2018-01-30 19:36:27
【问题描述】:

这个错误出现在 webpack target = node 但我已经完成了target=web(默认)

我也没有从外部加载 reactjs

在浏览器中加载应用时出现此错误

我做错了什么?

在控制台中

文件

webpack.config.js

const HtmlWebpackPlugin = require('html-webpack-plugin');
const nodeExternals = require('webpack-node-externals');

const config = {
    target: 'web',
    externals: [nodeExternals()],
    entry: './src/index.js',
    output: {
        filename: '[name].bundle.js',
        path: __dirname + '/build'
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: /node_modules/
            },
            {
                test: /\.css$/,
                use: ExtractTextPlugin.extract({
                    fallback: "style-loader",
                    use: "css-loader"
                })
            },
            {
                test: /\.(png|svg|jpe?g|gif)$/,
                use: [{
                        loader: 'file-loader',
                        options: {
                            name: '[path][name].[ext]'
                        }
                    }
                ]
            },
            {
                test: /\.(woff|woff2|eot|ttf|otf)$/,
                use: ['file-loader']
            }
        ]
    },
    devtool: 'inline-source-map',
    plugins: [
        new HtmlWebpackPlugin({
            title: 'Instarem.com'
        })
    ]
};

module.exports = config;

.babelrc 使用

babel-preset-env

{
    "presets": [
        "react",
        [
            "env",
            {
                "targets": {
                    "browsers": ["last 2 versions"]
                },
                "debug": true,
                "modules": "commonjs"
            }
        ]
    ],
    "plugins": [
        "transform-object-rest-spread",
        "transform-class-properties"
    ]
}

谢谢:)

我找到了线索


在 facebook 的 create react app generator 捆绑包中显示

module.exports = __webpack_require__(/*! ./lib/React */ "./node_modules/react/lib/React.js");

但在我的情况下它只显示

module.exports = require("react");

【问题讨论】:

    标签: javascript reactjs webpack ecmascript-6 babeljs


    【解决方案1】:

    我的问题出在我的 package.json 中,我必须删除

    "type":"module"

    它试图将文件加载为 es6 模块

    https://nodejs.org/api/packages.html#packages_type

    【讨论】:

    • 非常好,呵呵
    【解决方案2】:

    如果您使用的是webpackHtmlWebpackPlugin,请尝试从index.html删除 <script src="./src/app.js"></script>

    【讨论】:

      【解决方案3】:

      也许它会对某人有所帮助。添加到调用 nodeExternals 选项 importType 与值 'umd'。

      nodeExternals({
         importType: 'umd'
      })
      

      【讨论】:

      • 这对我帮助很大。谢谢先生。
      【解决方案4】:

      我在本地设置了这个配置(减去似乎特定于您的环境的无关内容)并且它有效。

      package.json

      {
        "name": "test-webpack",
        "version": "1.0.0",
        "description": "",
        "main": "webpack.config.js",
        "scripts": {
          "test": "echo \"Error: no test specified\" && exit 1",
          "start": "webpack"
        },
        "keywords": [],
        "author": "",
        "license": "ISC",
        "devDependencies": {
          "babel-core": "^6.26.0",
          "babel-loader": "^7.1.2",
          "babel-preset-env": "^1.6.0",
          "babel-preset-react": "^6.24.1",
          "webpack": "^3.5.5"
        },
        "dependencies": {
          "react": "^15.6.1",
          "react-dom": "^15.6.1"
        }
      }
      

      .babelrc

      {
        "presets": [
          "react",
          [
            "env",
            {
              "targets": {
                "browsers": ["last 2 versions"]
              },
              "debug": true,
              "modules": "commonjs"
            }
          ]
        ]
      }
      

      webpack.config.js

      const config = {
        target: 'web',
        entry: './index.js',
        output: {
          filename: '[name].bundle.js',
          path: __dirname + '/build',
        },
        module: {
          rules: [
            {
              test: /\.js$/,
              loader: 'babel-loader',
              exclude: /node_modules/,
            },
          ],
        },
      };
      module.exports = config;
      

      index.js

      import React from 'react';
      import ReactDOM from 'react-dom';
      ReactDOM.render(<div>Hello</div>, document.getElementById('root'));
      

      index.html

      <body>
          <div id="root" />
          <script src=" ./build/main.bundle.js "></script>
      </body>
      

      运行 npm start 构建包并运行 index.html 运行 react 应用程序。

      【讨论】:

      • 我已经在使用babel-preset-env。你可以在.babelrc中看到
      【解决方案5】:

      你不应该使用

      externals: [nodeExternals()],
      

      在网络应用程序中。根据https://github.com/liady/webpack-node-externals,它仅用于后端。由于您在 Web 应用程序中使用 nodeExternals,因此您将获得 CommonJS 模块,该模块需要内置节点 require 函数。因此,只需将其删除即可修复错误。

      【讨论】:

      • 我使用babel-preset-env而不是babel-preset-es2015几乎做同样的事情。只是babel-preset-env做的更多一点。所以一次只应该使用一个
      • @vijay 看到我更新的答案。我复制了 ypur 配置,它在没有 nodeExternals 的情况下按预期工作。
      • 我刚刚遇到了完全相同的问题,并且确实将 nodeExternals() 放在了针对 web 的配置中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-15
      • 2016-03-29
      • 2017-11-25
      • 2020-05-16
      • 2012-12-16
      • 2017-02-28
      相关资源
      最近更新 更多