使用cross-env解决跨平台设置NODE_ENV的问题

104
更多文章,请在Github blog查看

问题

在搭建公司新的前端工程的架构中,需要在在package.jsonscripts标签下配置一系列命令,如下所示:

"scripts": {
    "clear": "rm -rf build&& mkdir build",
    "start": "npm run clear&& NODE_ENV=development webpack-dev-server --host 0.0.0.0 --devtool eval --progress --color --profile",
    "deploy": "npm run pre&& npm run clear&& NODE_ENV=production webpack -p --progress"
  },

上面配置中的的&&最开始使用的是;,后来发现;在windows环境中无法正常运行,于是改成了*unix和windows都兼容的&&。但是公司的部分使用windows的同事在运行npm start的时候,依然会报错:

'NODE_ENV' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

npm ERR! Windows_NT 6.1.7601
npm ERR! argv "D:\\nodejs\\node.exe" "D:\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "start"
npm ERR! node v4.0.0-rc.5
npm ERR! npm  v2.14.2
npm ERR! code ELIFECYCLE
npm ERR! yy-ydh-web@1.0.7 start: `npm run clear&& NODE_ENV=development && webpack-dev-server --host 0.0.0.0 --devtool ev
al --progress --color --profile`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the yy-ydh-web@1.0.7 start script 'npm run clear&& NODE_ENV=development && webpack-dev-server --host
0.0.0.0 --devtool eval --progress --color --profile'.
npm ERR! This is most likely a problem with the yy-ydh-web package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     npm run clear&& NODE_ENV=development && webpack-dev-server --host 0.0.0.0 --devtool eval --progress --color
 --profile
npm ERR! You can get their info via:
npm ERR!     npm owner ls yy-ydh-web
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     D:\workspace\node_modules\yy-ydh-web\npm-debug.log

简单来说,就是windows不支持NODE_ENV=development的设置方式。

但是,又不想放弃这样简单方便的方式,于是只好求助于Google了。

解决方式

功夫不负有心人,在万能的google上,我找到了解决方法:cross-env
这个迷你的包能够提供一个设置环境变量的scripts,让你能够以unix方式设置环境变量,然后在windows上也能兼容运行。

使用方法:

  • 安装cross-env:npm install cross-env --save-dev
  • NODE_ENV=xxxxxxx前面添加cross-env就可以了。

赶紧试试吧!


如果觉得我的文章对你有用,请随意赞赏
已赞赏

你可能感兴趣的

13 条评论
chrisliu · 2016年12月07日

可以

+1 回复

尘缘六如 · 2017年12月26日

已赞赏,解决了困扰多时的问题。

+1 回复

Buletom · 2016年08月03日
set NODE_ENV=development && webpack --config webpack.config.dev.js

也可以实现一样的效果

回复

0

set只在windows下管用,在Linux下要使用export,所有才有了cross-env

mafeifan · 2018年03月02日
明了007 · 2016年09月29日

安装 across-env:npm install across-env --save-dev 这句写错了。应该是安装across-env:npm install cross-env --save-dev 包错了。

回复

maxxz · 2016年10月30日

6666

回复

earlyeearly · 2017年02月28日

多打了一个字母a

回复

0

已更正,多谢。

Pines_Cheng 作者 · 2017年03月01日
neal · 2017年05月01日

我加了 cross-env 以后报了以下错。楼主知道这是什么错吗

xiaoduyu@0.2.0 dev D:BaiduYunDownloadReactxiaoduyu.com-master

cross-env NODE_ENV=development __NODE__=false webpack --progress --colors --config webpack.development.config.js && cross-env NODE_ENV=development __NODE__=true node server

module.js:471

throw err;
^

Error: Cannot find module './config'

at Function.Module._resolveFilename (module.js:469:15)
at Function.Module._load (module.js:417:25)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (D:\BaiduYunDownload\React\xiaoduyu.com-master\webpack.development.config.js:9:14)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at module.exports (D:\BaiduYunDownload\React\xiaoduyu.com-master\node_modules\._webpack@1.15.0@webpack\bin\convert-argv.js:80:13)
at Object.<anonymous> (D:\BaiduYunDownload\React\xiaoduyu.com-master\node_modules\._webpack@1.15.0@webpack\bin\webpack.js:39:40)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)

回复

88888888888888888 · 2017年05月11日

系统之间的差异都可以这样玩
服了

回复

郭靖 · 2018年09月11日

--xxx=xxx

回复

Angelo丨凉城 · 3月25日

需要放进把文件放进vendor里面吗

回复

GpingFeng · 6月26日

webpack4 就不用设置这些了 --mode production

回复

载入中...