node.js - 导出 NODE_ENV=生产不会更改 gulpfile.js 中的 process.env.NODE_ENV

标签 node.js macos gulp environment-variables

我正在尝试使用

将环境变量 $NODE_ENV 设置为“生产”
export NODE_ENV=production

但是当我尝试运行我的 gulp 任务时,它说变量未定义:

if((process.env.NODE_ENV).trim().toLowerCase() !== 'production') {
                     ^

TypeError: Cannot read property 'trim' of undefined
at Object.<anonymous> (/Users/mmarinescu/Projects/gulpTutorial/gulpfile.js:15:26)
at Module._compile (module.js:435:26)
at Object.Module._extensions..js (module.js:442:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:311:12)
at Module.require (module.js:366:17)
at require (module.js:385:17)
at Liftoff.handleArguments (/usr/local/lib/node_modules/gulp/bin/gulp.js:116:3)
at Liftoff.<anonymous> (/usr/local/lib/node_modules/gulp/node_modules/liftoff/index.js:192:16)
at module.exports (/usr/local/lib/node_modules/gulp/node_modules/liftoff/node_modules/flagged-respawn/index.js:17:3)

但是,如果我echo $NODE_ENV,它会显示生产关键字。

本例中我的 gulp 设置如下:

var devBuild = ((process.env.NODE_ENV).trim().toLowerCase() !== 'production')

如果我使用 devBuild 的完整初始化,它总是正确的,因为它不考虑终端中的 $NODE_ENV 更改

var devBuild = ((process.env.NODE_ENV || 'development').trim().toLowerCase() !== 'production')

有谁知道为什么我的 gulpfile 中的变量没有更新以及如何解决这个问题?

在 MAC OSX EL Capitan 上运行

提前致谢!

稍后编辑:

我认为出现错误是因为我正在使用 sudo gulp html;

我使用 sudo 的原因是因为当我使用 gulp html 时,我收到此错误:

gulptutorial 1.0.0, production build
[00:44:21] Using gulpfile ~/Projects/gulpTutorial/gulpfile.js
[00:44:21] Starting 'html'...
[00:44:22] 'html' errored after 101 ms
[00:44:22] Error: EACCES: permission denied, open      '/Users/mmarinescu/Projects/gulpTutorial/build/index.html'
at Error (native)

gulp 任务是:

gulp.task('html', function() {
var page = gulp.src(html.in).pipe(preprocess({ context: html.context }));//we add the preprocessed html to a var
if(!devBuild) { //global variable defined on step 7
    page = page.pipe(htmlclean());//minifying the html only if we're in the production mode

    console.log(devBuild)
}
return page.pipe(gulp.dest(html.out))
})

哪里

html = {
    in: source + '*.html',
    out: dest,
    context: {
        devBuild: devBuild
    }
};

var source = 'source/',
dest = 'build/';

如果我使用 gulp html,变量会更改为生产环境,但出现错误,如果我使用 sudo gulp html,任务会完成,但变量不会更改...

gulpTutorial mmarinescu$ export   NODE_ENV=production
gulpTutorial mmarinescu$  gulp html
gulptutorial 1.0.0, production build
[00:58:12] Using gulpfile ~/Projects/gulpTutorial/gulpfile.js
[00:58:12] Starting 'html'...
[00:58:12] 'html' errored after 87 ms
[00:58:12] Error: EACCES: permission denied, open '/Users/mmarinescu/Projects/gulpTutorial/build/index.html'
at Error (native)

对比

gulpTutorial mmarinescu$ sudo gulp html
gulptutorial 1.0.0, development build
[01:02:10] Using gulpfile ~/Projects/gulpTutorial/gulpfile.js
[01:02:10] Starting 'html'...
[01:02:10] Finished 'html' after 67 ms

注意,NODE_ENV 变量在这两种情况下都是生产变量...

谢谢

最佳答案

使用 sudo 时,您将以不同的用户(root)身份运行该进程。这就是环境变量未定义的原因。尝试为您的文件设置正确的权限,您应该能够在没有 sudo 的情况下运行

关于node.js - 导出 NODE_ENV=生产不会更改 gulpfile.js 中的 process.env.NODE_ENV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33947703/

相关文章:

javascript - 使用 Node js获取文件系统类型

angular - 函数 typescript 后停止滚动事件

cocoa - 使用 Mac 应用程序保存文件 - 文件扩展名

javascript - 安装后找不到 gulp run 命令

javascript - 在 React JS 中需要带有变量的文件

javascript - Visual Studio 任务运行器 "SyntaxError: Use of const in strict mode."

JavaScript 对象操作在唯一操作后显示不同键的相同值

node.js - 语音转文本 bing 语音 API Azure

node.js - 从Node.js中的AWS Lambda函数返回的正确方法是什么?

java - 使用 java (1.6.0_17) 从 mac(10.6.6) 发送电子邮件