gpt4 book ai didi

node.js - 从 Grunt 任务设置 NODE_ENV

转载 作者:太空宇宙 更新时间:2023-11-03 22:26:47 24 4
gpt4 key购买 nike

我想在 Grunt 任务开始时将 NODE_ENV 变量设置为 developmentproduct,但看起来并不像我想象的那么简单。

我想要这个的原因是我使用 grunt-webpack,它期望 NODE_ENV 正确设置为“开发”或“生产”。但如果可能的话,我也想专门从 grunt 初始化我的任务。

我使用 grunt-shell 创建了以下测试 Gruntfile和 cross-env模块:

function log(err, stdout, stderr, cb, e) {
if (err) {
cb(err);
return;
}

console.log(process.env.NODE_ENV);
console.log(stdout);
cb();
}

module.exports = function(grunt) {

grunt.initConfig({
shell: {
dev: {
command : 'cross-env NODE_ENV="development"',
options: {
callback: log
}
},
dist: {
command : 'cross-env NODE_ENV="production"',
options: {
callback: log
}
}
}
});

grunt.loadNpmTasks('grunt-shell');

};

log() 的第 6 行应该回显 process.env.NODE_ENV 的实际值,但它不断显示 undefined,即使我在 Node 控制台中手动检查它也是如此。

如果我从终端手动设置它,例如 set NODE_ENV=product (set 适用于 Windows),则到处都会回显值 product ,正如我所希望的那样。

最佳答案

您的测试将无法进行,因为 grunt-shell运行 child_process并且您的回调在结束后并在主流程下运行。
cross-env 也会发生同样的情况.

如果您想将环境变量传递给 grunt-shell,您应该使用 options配置根据documentation .
例如:

grunt.initConfig({
shell: {
dev: {
command : 'echo %NODE_ENV%', //windows syntax
options: {
execOptions: {
env: {
'NODE_ENV': 'dev'
}
},
callback: log
}
}
}
});

这仍会为 process.env.NODE_ENV 打印 undefined,但 NODE_ENV 的值将在 stdout 中可用 因为回声

顺便说一句,听起来您正在尝试运行一个进程(grunt-shell),该进程运行一个进程(cross-env),该进程运行进程(webpackgrunt-webpack)。
为什么不直接使用cross-env example usage ?它看起来非常接近您所需要的。
或者您可以在任务 config 中定义变量本身并丢失所有这些包装。

关于node.js - 从 Grunt 任务设置 NODE_ENV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44968873/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com