这是 webpack.config.js
"use strict";
module.exports = {
entry: ['./main.js'],
output: { path: __dirname, filename: 'bundle.js' },
module: {
loaders: [
{
test: /.js?$/,
loader: 'babel-loader',
exclude: /node_modules/,
query: {
presets: ['es2015', 'react']
}
},
{test: /\.json$/, loader: "json"},
]
},
externals: {
React: 'react',
},
target: "node",
};
Main.js
import React from 'react';
import ReactDOM from 'react-dom';
import {Table, Column, Cell} from 'fixed-data-table';
import Chart from 'chartjs';
import jQuery from 'jquery';
import vis from 'vis';
import babel from 'babel-core';
Bundle.js 已插入我的Index.html。浏览器然后给出错误:
Uncaught ReferenceError: process is not defined
at Object.measureMethods (bundle.js:1297)
at Object.<anonymous> (bundle.js:530)
at __webpack_require__ (bundle.js:20)
at Object.<anonymous> (bundle.js:288)
at __webpack_require__ (bundle.js:20)
at Object.<anonymous> (bundle.js:158)
at __webpack_require__ (bundle.js:20)
at Object.<anonymous> (bundle.js:110)
at __webpack_require__ (bundle.js:20)
at Object.<anonymous> (bundle.js:90)
我应该在webpack.config.js中更改什么才能使此错误消失?
答案 0 :(得分:18)
更新2020年10月:
对于webpack 5,您可以从process/browser
的相应plugins
部分引用webpack.config.js
// webpack needs to be explicitly required
const webpack = require('webpack')
module.exports = {
/* ... rest of the config here ... */
plugins: [
// fix "process is not defined" error:
// (do "npm install process" before running the build)
new webpack.ProvidePlugin({
process: 'process/browser',
}),
]
}
答案 1 :(得分:7)
您需要添加一个插件来定义您的env(在webpack配置中):
plugins: [
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify('development')
})
],
答案 2 :(得分:6)
dotenv
节点模块:dotenv
: yarn add -D dotenv
或npm i -D dotenv
.env
文件,并包含所需的变量:NODE_ENV=development
apiKey=w23io222929kdjfk
domain=example.domain.org
webpack.DefinePlugin
定义这些变量:// webpack.config.js
const webpack = require('webpack')
const dotenv = require('dotenv')
module.exports = {
//...
plugins: [
// ...
new webpack.DefinePlugin({
'process.env': JSON.stringify(dotenv.config().parsed) // it will automatically pick up key values from .env file
})
// ...
]
//...
}
environment variables
中的source code
:// src/index.js
alert(process.env.NODE_ENV)
alert(process.env.apiKey)
dotenv
:https://www.npmjs.com/package/dotenv webpack.DefinePlugin
:https://webpack.js.org/plugins/define-plugin/ 祝你好运...
答案 3 :(得分:5)
我就是这样解决的
<块引用>ReferenceError: 进程未定义
Webpack 5 错误
npm i --save-dev 进程
删除节点模块文件夹
在你的 webpack 配置文件插件部分添加下面
plugins: [
new webpack.ProvidePlugin({
process: 'process/browser',
}),
同样在 webpack 中添加如下别名:
resolve: {
alias: {
process: "process/browser"
},
现在做 npm i 当您构建应用程序时,错误就会消失。
答案 4 :(得分:4)
Webpack 5 删除了使用符号process.env.MY_ENV_VAR
访问环境变量的功能。我遇到了同样的问题,因为我的浏览器控制台出现了Uncaught ReferenceError: process is not defined
错误。他们在the documentation of porting from v4 to v5 of Webpack中提到以下内容:
1。升级到v5之前,verify that you can easily do it
尝试在webpack 4配置中设置以下选项,然后 检查构建是否仍然正常工作。
module.exports = { // ... node: { Buffer: false, process: false } };
webpack 5从配置模式中删除了这些选项,并且将始终使用false。
升级您的计算机时,您必须再次删除这些选项 Webpack 5的配置。
2。由于process
被删除而处理环境变量
- 关于运行时错误:
未定义
process
。
- webpack 5不再为此Node.js变量包含polyfill。避免在前端代码中使用它。
- 是否要支持前端和浏览器使用?使用
exports
或imports
package.json字段使用不同的代码,具体取决于 环境。
- 也可以使用
browser
字段来支持较早的捆绑软件。- 替代:使用
typeof process
检查来包装代码块。请注意,这将对捆绑包的大小产生负面影响。- 是否要在
process.env.VARIABLE
中使用环境变量?您需要使用DefinePlugin
或EnvironmentPlugin
来定义这些 配置中的变量。
- 考虑改用
VARIABLE
,并确保也检查typeof VARIABLE !== 'undefined'
。process.env
特定于Node.js 并应避免在前端代码中使用。
因此,鉴于上述信息,可以使用以下两个插件之一来使用环境变量。
const webpack = require("webpack");
module.exports = {
...
plugins: [
new webpack.DefinePlugin({
"process.env.MY_ENV_VAR": JSON.stringify(process.env.MY_ENV_VAR)
}),
new webpack.EnvironmentPlugin(['MY_ENV_VAR']); // <--This is shorthand, does the same thing as the DefinePlugin
],
};
然后在生产代码中,仍然可以用相同的方式引用环境变量,例如:
console.log(process.env.MY_ENV_VAR);
但是,正如他们在上面的文档中所说的那样,不建议使用process.env
,因为它特定于Node.js。
答案 5 :(得分:1)
您的dotenv-webpack
中有dotenv
/ webpack
,但仍不能在 Angular 上运行吗?在浏览器上运行process.env
应用程序(没有Angular
)时,很可能是您试图访问Angular Universal
,例如由ng serve
。
运行npm i -S process
,然后在polyfills.ts
中粘贴以下代码
import * as process from "process";
window["process"] = process;
或者,如果不是这种情况,而您正在寻找webpack
来获取环境变量,那么dotenv-webpack
是最简单的变量。{1} >
const dotenv = require("dotenv-webpack");
const webpackConfig = {
plugins: [new dotenv()]
};
module.exports = webpackConfig; // Export all custom Webpack configs.
当然,您需要在项目根目录的.env
文件中定义它们。
答案 6 :(得分:0)
Webpack 5,对我来说最简单的解决方案...
<块引用>npm install dotenv-webpack --save-dev
// webpack.config.js
const Dotenv = require('dotenv-webpack');
module.exports = {
...
plugins: [
new Dotenv()
]
...
};
答案 7 :(得分:0)
为了避免我在 webpack.config.js 中提供的问题中所指出的错误,下一个配置(注意定义变量级别:process.env
):
new webpack.DefinePlugin({
"process.env": JSON.stringify(process.env)
})
现在一切正常。我使用的是 webpack 5.30.0、Vue 2.6.12 和 vuelidate 0.7.6。
我之前在浏览器控制台中遇到的错误:
Uncaught ReferenceError: process is not defined
at Object.../node_modules/vuelidate/lib/withParams.js
这不是一件好事,浏览器客户端库“vuelidate”需要 Node.js 特定的 env 变量。库中混淆的构建和运行时区域。
答案 8 :(得分:0)
我的问题是使用 webpack 5 在 Internet Explorer 11 上出现 process is undefined
错误。
感谢@ArianPopalyar,这就是我解决process.env.MY_ENV_VAR
问题的方法。
Ref. Answer
除了她的解决方案,我还在webpack.config.js中添加了EnvironmentPlugin:
...
plugins: [
new webpack.ProvidePlugin({
process: 'process/browser'
}),
new webpack.EnvironmentPlugin({
PATH_MODERN: 'dist/modern/domready.min.js',
PATH_LEGACY: 'dist/legacy/domready.min.js',
DEBUG: false
}),
...
]
并在 index.js 中使用它
if (process.env.PATH_LEGACY) {
// ...
}
答案 9 :(得分:0)
使用 "webpack": "^5.1.3",
对我来说允许读取 React 中的环境变量webpack.config.js
const webpackConfig = {
plugins: [
new webpack.ProvidePlugin({
process: 'process/browser',
}),
new webpack.DefinePlugin({
'process.env': JSON.stringify(process.env)
})
],
};
:)
答案 10 :(得分:0)
简单的方法:在调用 webpack 时添加变量“NODE_ENV”,即 NODE_ENV=production webpack --watch