webpack:未捕获的 ReferenceError:未定义要求

Posted

技术标签:

【中文标题】webpack:未捕获的 ReferenceError:未定义要求【英文标题】:webpack : Uncaught ReferenceError: require is not defined 【发布时间】: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");

【问题讨论】:

【参考方案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 的配置中。

以上是关于webpack:未捕获的 ReferenceError:未定义要求的主要内容,如果未能解决你的问题,请参考以下文章

Webpack - 未捕获的 ReferenceError:未定义 webpackJsonp

Webpack:Bundle.js - 未捕获的 ReferenceError:未定义进程

Angular 2/webpack 中的“未捕获的 ReferenceError:未定义要求”

未捕获的类型错误:在 webpack 重建 CommonsChunkPlugin 后无法读取未定义的属性“调用”

未捕获的ReferenceError:require未定义Webpack + AngularJS

骨干木偶和 Webpack - 未捕获的类型错误:无法读取未定义的属性“收音机”