资讯专栏INFORMATION COLUMN

业务代码如何判断生产/开发环境

Jackwoo / 2436人阅读

摘要:开发环境和生产环境分离的原因在开发时,会产生或者是测试的代码,这些代码不应该出现在生产环境中。当项目部署时,往往会将代码进行一系列的压缩来优化它,如此会彻底破坏代码的可读性。方案二使用这个参数来辨别开发环境。

开发环境和生产环境分离的原因

在开发时,会产生 debug 或者是测试的代码,这些代码不应该出现在生产环境中。当项目部署时,往往会将代码进行一系列的压缩来优化它,如此会彻底破坏代码的可读性。本地开发往往使用的是本地 mock 的数据,而正是上线后用的是真实数据。以上几点,开发环境和生产环境必须得分离。

比如我想让项目根据不同的环境登录不同的地址。本地开发登录的是localhost,测试环境登录的是test地址,上线环境登录的是online地址。那么业务代码里如何判断生产开发测试环境呢?

方案一 将环境变量配置到 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.jsonscript中的参数, webpack文件中如何读取呢?
在 webpack 中, 可通过 process.env.NODE_ENV获取到变量

// webpack 下
plugins: [
  new webpack.DefinePlugin({
    "process.env": {
      NODE_ENV: JSON.stringify(process.env.NODE_ENV)
    }
  })
]

为什么需要加上JSON.stringify, 因为webpack 打包的时候对变量做替换会将 process.env.NODE_ENV 替换成 production, 而我们期望的是 "production"

有个问题,new webpack.DefinePlugin 定义的全局变量是 在编译时可以配置的全局常量。,那么,如何在 webpack config 文件中使用 process.env.NODE_ENV 呢?
就是上面的回答,在脚本中设置变量 并且用上cross-env。 因此经常两者结合使用。

方案二:

使用process.env.npm_lifecycle_event 这个参数来辨别开发环境。
npm 提供一个 npm_lifecycle_event 变量,返回当前正在运行的脚本名称
这个方法极为简单。

npm scripts 使用指南

webpack.DefinePlugin使用介绍

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97141.html

相关文章

  • webpack多页应用架构系列(七):开发环境生产环境傻傻分不清楚?

    摘要:开发环境和生产环境都拥有的配置,但在细节上有所不同,比如说,又比如说中的和参数。更重要的是,实际上开发环境和生产环境的配置文件的绝大部分都是一致的,对于这一致的部分来说,我们坚决要消除冗余,否则后续维护起来不仅麻烦,而且还容易出错。 本文首发于Array_Huang的技术博客——实用至上,非经作者同意,请勿转载。原文地址:https://segmentfault.com/a/11900...

    paulquei 评论0 收藏0
  • 工行数据中心高级经理 李雁南:接口冒烟测试方法

    摘要:接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。随着案例和执行结果的不断积累,接口测试覆盖会更加充分,统计结果会更加精确。 原文出自【听云技术博客】:http://blog.tingyun.com/web/a... 今年遇到了几个问题,与接口的功能和性能相关,恰巧最近公司也在组织以冒烟测试为主题的活动,于是乎突发奇想,寻思着能否将接口测试与冒烟测试结合起来,发掘一...

    sunny5541 评论0 收藏0
  • JavaScript 需要检查变量类型吗

    摘要:一返回值调用外部方法获取的值需要对类型做判断,因为我们对方法返回的值是有期望值类型,但是却不能保证这个接口返回的值一直是同一个类型。 19年目标:消灭英语!我新开了一个公众号记录一个程序员学英语的历程 有提升英语诉求的小伙伴可以关注公众号:csenglish 程序员学英语,每天花10分钟交作业,跟我一起学英语吧 javascript作为一门动态类型语言,具有很高的动态灵活性,当定义函数...

    Songlcy 评论0 收藏0
  • 马蜂窝大交通业务质量体系建设初步实践

    摘要:大交通研发质量体系建设为了帮助用户更好地完成消费决策闭环,马蜂窝上线了大交通业务,为用户提供购买机票火车票等服务。 质量是决定产品能否成功、企业能否持续发展的关键因素之一。如何做好质量体系建设,这是个比较大的话题,包含的范围很广,也没有固定的衡量标准。 打开一个互联网公司招聘网站,搜索「测试工程师」岗位时,你会发现几乎全部 JD 都包含一条要求「建设或者参与建设所负责业务的质量体系」。...

    Ilikewhite 评论0 收藏0
  • 马蜂窝大交通业务质量体系建设初步实践

    摘要:大交通研发质量体系建设为了帮助用户更好地完成消费决策闭环,马蜂窝上线了大交通业务,为用户提供购买机票火车票等服务。 质量是决定产品能否成功、企业能否持续发展的关键因素之一。如何做好质量体系建设,这是个比较大的话题,包含的范围很广,也没有固定的衡量标准。 打开一个互联网公司招聘网站,搜索「测试工程师」岗位时,你会发现几乎全部 JD 都包含一条要求「建设或者参与建设所负责业务的质量体系」。...

    fantix 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<