前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >webpack设置自定义环境变量以区分打包后不同环境不同输出

webpack设置自定义环境变量以区分打包后不同环境不同输出

作者头像
前端人人
发布2019-06-11 17:39:57
7.5K0
发布2019-06-11 17:39:57
举报
文章被收录于专栏:前端人人前端人人

你有没有遇到过这样的情况!比如你们有四种(或更多)环境:开发环境(本地调式代码环境)、测试环境(脏数据环境)、预生产环境(无限接近生产环境)、生产环境(正式环境或线上环境)等等环境。而对于不同环境你的静态资源host地址或者你的微信appid等等可能是不一样的。关于这个问题我之前大概经历了三个阶段。

第一阶段:

每次发布,都去注释修改。比如:

第二阶段:

通过window.location.host来判断。比如:

第三阶段:

通过process.env.NODE_ENV来判断。比如:

目前进入第四阶段,就是用webpack的DefinePlugin,其实这个早就有了,只是自己没去仔细看,感觉自己好渣渣

(其实本来就很渣渣

,也会一直渣渣下去

,在渣渣的路上越走越远

)。

第四阶段:

废话说了很多,进入正题:

比如上面的第三阶段通过process.env.NODE_ENV来判断,只能区分开发环境和发布环境,这个发布环境可能有 测试环境、预生产环境、生产环境,那怎么办?我们可以设置process.env.NODE_ENV,这里我们使用 cross-env 来设置,它是跨平台的。

代码语言:javascript
复制
npm i -D cross-env

比如我们这么设置:

代码语言:javascript
复制
    "test": "cross-env NODE_ENV=test webpack",
    "per": "cross-env NODE_ENV=preproduction webpack",
    "pro": "cross-env NODE_ENV=production webpack"

然后代码这么写:

代码语言:javascript
复制
console.log(process.env.NODE_ENV);

我们执行下命令:

代码语言:javascript
复制
npm run test
npm run per
npm run pro

发现打包后都是:

这是因为webpack 配置文件里定义了,如下:

这个时候我们就需要用到 webpack的DefinePlugin了,如下设置:

代码语言:javascript
复制
new webpack.DefinePlugin({
      "process.env": {
        NODE_ENV: JSON.stringify(process.env.NODE_ENV)
      }
    })

我们再执行下命令:

代码语言:javascript
复制
npm run test
代码语言:javascript
复制
npm run per
代码语言:javascript
复制
npm run pro

完美实现!

我们还可以自定义!

比如这样:

代码语言:javascript
复制
"test": "cross-env NODE_ENV_QDRR=test webpack",
"per": "cross-env NODE_ENV_QDRR=preproduction webpack",
"pro": "cross-env NODE_ENV_QDRR=production webpack"

执行上面的三条命令,也会等到相同的结果:

本文完!

感谢童鞋们支持,希望对你有所帮助!

如果你有什么问题,可以在下方留言给我们!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端人人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档