NodeJS 如何使Webpack在构建过程中不将Process.env变量转换为它们值?

bvhaajcl  于 2022-12-18  发布在  Node.js
关注(0)|答案(3)|浏览(145)

我的一个项目文件中包含以下内容:

const baas = process.env.DBID;
console.log('baas', baas);

如果我运行:

cross-env PORT=4000 NODE_ENV=production WEBPACK_CONFIG=browser_prod,server_prod webpack --colors

我的server.js文件如下所示:

const baas = undefined;
console.log('baas', baas);


正如预期的那样。但是,我希望能够在运行构建的应用程序时设置ID,而不是在构建应用程序时,即:

DBID=someotherid node dist/server.js

因此,我需要webpack在构建时不将const baas = process.env.DBID转换为它的值,而是让它保持原样,以便server.js在运行时使用它的值。
我该怎么做呢?
注:如果我手动编辑构建的server.js并将undefined更改为process.env.DBID,则运行脚本将工作,应用将使用运行时的env变量,但我不想在构建后编辑文件。

luaexgnf

luaexgnf1#

你用错靶子了。
默认情况下,webpack构建的应用程序将在浏览器中运行,这意味着它将模拟pathfsprocess等本地节点函数
您的目标是node,因此没有必要模拟这些。
将此添加到您的webpack.config.js

module.exports = {
  target: 'node'
};

https://webpack.js.org/concepts/targets/#usage

zdwk9cvp

zdwk9cvp2#

您需要的是process.argv而不是process.env

// server.js

const baas = process.argv[0];
console.log('baas', baas);

然后:

node dist/server.js baas_value

为方便起见,您可以使用此模块https://www.npmjs.com/package/yargs

yv5phkfx

yv5phkfx3#

我能够通过如下间接访问来阻止Webpack转换process.env

const processText = "process";
const _process = global[processText];
app.listen(_process.env.PORT || 2000);

您需要间接获取process而不是env,因为webpack将process变量定义为类似/* provided dependency */ var process = __webpack_require__(/*! process/browser */ "process/browser");的值

相关问题