在开发时,会产生 debug 或者是测试的代码,这些代码不该该出如今生产环境中。当项目部署时,每每会将代码进行一系列的压缩来优化它,如此会完全破坏代码的可读性。本地开发每每使用的是本地 mock 的数据,而正是上线后用的是真实数据。以上几点,开发环境和生产环境必须得分离。html
好比我想让项目根据不一样的环境登陆不一样的地址。本地开发登陆的是localhost,测试环境登陆的是test地址,上线环境登陆的是online地址。那么业务代码里如何判断生产开发测试环境呢?webpack
package.json
// package.json { // npm install cross-env // 由于mac和windows设置命令环境变量的命令不一致, 因此用cross-env来作兼容 "script": { "dev": "cross-env NODE_ENV=dev webpack --progress --colors", "production": "cross-env NODE_ENV=production webpack --progress --colors" } } // npm run dev // 开发 // npm run production // 生产
那么 package.json
的 script
中的参数, webpack
文件中如何读取呢?
在 webpack 中, 可经过 process.env.NODE_ENV
获取到变量web
// webpack 下 plugins: [ new webpack.DefinePlugin({ 'process.env': { NODE_ENV: JSON.stringify(process.env.NODE_ENV) } }) ]
为何须要加上JSON.stringify
, 由于webpack 打包的时候对变量作替换会将 process.env.NODE_ENV
替换成 production
, 而咱们指望的是 'production'
npm
有个问题,new webpack.DefinePlugin
定义的全局变量是 在编译时能够配置的全局常量。
,那么,如何在 webpack config
文件中使用 process.env.NODE_ENV
呢?
就是上面的回答,在脚本中设置变量 而且用上cross-env
。 所以常常二者结合使用。json
使用process.env.npm_lifecycle_event
这个参数来辨别开发环境。
npm 提供一个 npm_lifecycle_event
变量,返回当前正在运行的脚本名称
这个方法极为简单。windows
npm scripts 使用指南post