NODE_ENV跨平台设置

set NODE_ENV问题

最近接手系统中采用React作为管理端,其中有这样一句

1
"build": "node ./tools/gulpfile.js&&set NODE_ENV=__PROD__&&node ./tools/webpack.config.js"

其中“set NODE_ENV=PROD”却未在我的Mac下生效,其他成员使用Windows。
原因是Windows下使用set NODE_ENV=xx,Unix下应该为export NODE_ENV=xx,于是不得不区分操作系统进行设置,于是就有了cross-env这个方案。

使用cross-env解决跨平台

修改命令为

1
"build": "node ./tools/gulpfile.js&&cross-env NODE_ENV=__PROD__&&node ./tools/webpack.config.js"

执行后,结果还是TMD没生效。查看cross-env的Usage后,区别在于我使用了&&分隔,在后面的webpack.config.js中获取前面设置的NODE_ENV,问题是否出在这里呢?

&&与空格问题

感谢justjavac提供支持

&&为shell逻辑与运算符

格式
command1 && command2 [&& command3 …]
command1执行成功才会执行command2,任意命令执行失败则不会再执行后面的命令
shell执行命令可以(;、&&、||)间隔

正确使用 cross-env vs cross-evn-shell

cross-env

1
"build": "node ./tools/gulpfile.js&&cross-env NODE_ENV=__PROD__ node ./tools/webpack.config.js"

cross-env-shell

1
"build": "node ./tools/gulpfile.js&&cross-env-shell NODE_ENV=__PROD__ \"node ./tools/webpack.config.js && echo $NODE_ENV\""

\”\”包裹中的内容都可以有效取到cross-env-shell设置的环境变量,这里面的原理在于Node本身的跨平台机制spawn

参考

cross-env 不起作用怎么办?