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-env1
"build": "node ./tools/gulpfile.js&&cross-env NODE_ENV=__PROD__ node ./tools/webpack.config.js"
cross-env-shell1
"build": "node ./tools/gulpfile.js&&cross-env-shell NODE_ENV=__PROD__ \"node ./tools/webpack.config.js && echo $NODE_ENV\""
\”\”包裹中的内容都可以有效取到cross-env-shell设置的环境变量,这里面的原理在于Node本身的跨平台机制spawn