如何设置process.env.NODE_ENV生产环境模式

在开始之前我先强调一下: process.env.NODE_ENV默认只有两种状态即development和production,development指代本地开发即localhost环境(本地的开发),而production代表发布在任何服务上的服务(不管是dat、uat还是生产环境),node是不知道你服务是测试还是正式,除非你手动指定。通常认为都是线上环境。所以可以这样认为development代表本地开发环境,production代表线上环境(包括dat、uat和生产环境等)

我为什么会强调这一点呢?

因为有人居然用process.env.NODE_ENV中的development来代表dat,uat等线上的测试环境,所以特别强调一下,development代表本地的开发环境。

最近系统接入了公司的单点登录,为了登陆成功后再跳回系统的主页面,又申请了测试和沙箱的域名(之前都是直接用IP登的),本地开发是配置的host。接入之后发现了一个非常麻烦的点就是给单点登录传的跳转地址每次都要修改,开发的时候要写成开发的域名,测试的时候要改成测试的域名,进沙箱的时候要改成跳转沙箱的域名,上线的时候又要改成线上的域名。特别是在测试阶段,开发测试来回切换,不胜其烦。
于是就想把它写成配置文件,根据不同环境加载不同的配置,这样就不用来回改了。这个时候,process.env就跳入了脑海。

扒一扒process.env

process对象是全局变量,它提供当前node.js的有关信息,以及控制当前node.js的有关进程。因为是全局变量,它对于node应用程序是始终可用的,无需require()。

既然process都是一个对象了,env自然是它的一个属性,这个属性返回包含用户环境信息的对象。在终端输入node后,在输入process.env可以看到打印出来的信息。

主角出场 process.env.NODE_ENV

NODE_ENV不是process.env对象上原有的属性,那它是怎么添加上的呢?

先举个例子:

在package.json中,如下:

{
  "name": "yun-nobile",
  "version": "2.0.0",
  "description": "太保标准移动端产品2.0,基于vue",
  "main": "yunprod.js",
  "scripts": {
    "build": "cross-env NODE_ENV=production node yunprod.js build",
    "dev": "node yunprod.js dev"
  }
  ...
}

在我们执行 npm run build 脚本命令时,会执行cross-env NODE_ENV=production node yunprod.js build,把NODE_ENV设置为production,所以 process.env.NODE_ENV就被设置为production了 。

所以 process.env.NODE_ENV是我们执行脚本命令时添加上去的一个全局环境变量。

process.env.NODE_ENV用来确定当前所处的开发阶段。一般生产阶段设为production,开发阶段设为develop,然后在脚本中读取process.env.NODE_ENV。
运行脚本时,可以这样改变环境变量, 在package.json文件的scripts里面添加命令:

NODE_ENV=production node build.js

但是这个命令使用Windows的同学拉下代码后就报错了,因为Windows上面设置的方式不一样

set NODE_ENV=production node build.js

但是不同电脑上不同的设置肯定是不行的呀,这个时候cross-env赶来救场了。
cross-env可以跨平台的设置和使用环境变量

npm install --save-dev cross-env

接下来我们就可以通过cross-env来设置了

cross-env NODE_ENV=production node build.js

这样设置之后,我们可以在脚本中使用process.env.NODE_ENV了,但是不能在模块中使用,要想在模块当中直接使用,我们还需要一些配置

在 webpack 4+ 中,你可以使用 mode 选项:

module.exports = {
  mode: 'production'
}

但是在 webpack 3 及其更低版本中,你需要使用 DefinePlugin:

var webpack = require('webpack')

module.exports = {
  // ...
  plugins: [
    // ...
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('production')
    })
  ]
}

这样就可以直接使用啦_
现在我们要在模块中根据环境变量来配置不同的url了

let url = '';
 if (process.env.NODE_ENV === 'testing') {
   url = 'http://my.test.cn';
 } else if (process.env.alpord === 'alpord') {
   url = 'http://my.alpord.cn';
 } else if (process.env.NODE_ENV === 'production') {
   url = 'http://my.product.cn';
 } else {
   url = 'http://my.develop.cn';
 }

或者是

let url = '';
process.env.NODE_ENV === 'production'?url = 'http://my.product.cn':url = 'http://my.test.cn';

到此这篇关于如何设置process.env.NODE_ENV生产环境模式的文章就介绍到这了,更多相关process.env.NODE_ENV设置生产环境模式内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 深入理解webpack process.env.NODE_ENV配置

    在node中,有全局变量process表示的是当前的node进程.process.env包含着关于系统环境的信息.但是process.env中并不存在NODE_ENV这个东西.NODE_ENV是用户一个自定义的变量,在webpack中它的用途是判断生产环境或开发环境的依据的. 为了查看 process的基本信息,我们可以在文件夹中 新建一个 process.js 文件,在里面加一句代码:console.log(process);然后进入该文件夹,执行 node process.js 可以在命令行

  • 如何设置process.env.NODE_ENV生产环境模式

    在开始之前我先强调一下: process.env.NODE_ENV默认只有两种状态即development和production,development指代本地开发即localhost环境(本地的开发),而production代表发布在任何服务上的服务(不管是dat.uat还是生产环境),node是不知道你服务是测试还是正式,除非你手动指定.通常认为都是线上环境.所以可以这样认为development代表本地开发环境,production代表线上环境(包括dat.uat和生产环境等) 我为什么会

  • webpack开发环境和生产环境的深入理解

    以前自己写一小项目时,webpack的配置基本就是一套配置,没有考虑生产环境和开发环境的区分,最近在做一个复杂的商城项目接触到了webpack的高级配置,经过两天的研究,写出了一份目前来说比叫满意的配置,在这里分享一下. 如何区分开发环境和生产环境? 众所周知,webpack时基于node.js平台运行的,要区分开发环境和生产环境还要存,node入手.我们启动webpack时,都需要输入一些命令,npm run .yarn start之类的,所以我们就从命令行入手,告诉webpack,当前是什么

  • Node.js中环境变量process.env的一些事详解

    前言 最近这两天在和运维GG搞部署项目的事儿.碰到一个问题就是,咱们的dev,uat,product环境的问题. 因为是前后端分离,所以在开发和部署的过程中会有对后端接口的域名的切换问题.折腾了一下午,查询了各种资料这才把这Node环境变量process.env给弄明白. 下面这就做个问题解决的记录.希望能对这个不明白的人有所帮助.话不多说了,来一起看看详细的介绍吧. Node环境变量 首先,咱们在做react.vue的单页应用开发的时候,相信大家对配置文件里的process.env并不眼生.

  • vue-cli 环境变量 process.env的使用及说明

    目录 vue-cli 环境变量 process.env使用 vue-cli配置环境变量process.env.xxx 总结 vue-cli 环境变量 process.env使用 参考官网:  https://cli.vuejs.org/zh/guide/mode-and-env.html#在客户端侧代码中使用环境变量 话不多说直接看代码 在package中的配置如下图 举个本地运行的例子.env.serve: 注意: 除了 VUE_APP_* 变量之外,在你的应用代码中始终可用的还有两个特殊的变

  • 基于Vue生产环境部署详解

    前面的话 开发时,Vue 会提供很多警告来帮助解决常见的错误与陷阱.生产时,这些警告语句却没有用,反而会增加载荷量.再次,有些警告检查有小的运行时开销,生产环境模式下是可以避免的.本文将详细介绍Vue生产环境部署 生产环境 如果用 Vue 完整独立版本 (直接用 <script> 元素引入 Vue),生产时应该用精简版本 (vue.min.js) 如果用 Webpack 或 Browserify 类似的打包工具时,生产状态会在 Vue 源码中由 process.env.NODE_ENV 决定,

  • vue中控制mock在开发环境使用,在生产环境禁用方式

    目录 vue控制mock在开发环境使用,在生产环境禁用 说下原因 解决方案 vue中使用mock(常用方式) 前期准备 安装axios和mock.js插件 在main.js中引入 编写mock.js 调用 成功 vue控制mock在开发环境使用,在生产环境禁用 说下原因 mock拦截所有的axios请求,根据请求,做出相应的响应.平时前后端分离开发,我们使用mock获得相应的数据,但当和后端联调的时候,不禁用mock,就无法获得后端数据. 解决方案 第一步.我们设置mock在开发developm

  • VueCli生产环境打包部署跨域失败的解决

    常见的跨域配置(/config/index.js): proxyTable: { '/api': { target: 'http://192.168.2.139:8080/Mobile/Max', // 接口的域名 // secure: false, // 如果是https接口,需要配置这个参数 changeOrigin: true, // 如果接口跨域,需要进行这个参数配置,为true的话,请求的header将会设置为匹配目标服务器的规则(Access-Control-Allow-Origin

  • vue或react项目生产环境去掉console.log的操作

    在开发环境写了很多console.log/info/debug,在生产环境需要去掉这些console. 如果手动删除未免也太累了,再说以后想再开发还得重新写console. 事实上webpack提供了删除console的插件,在vue-cli3里面是这样用的: 首先安装terser-webpack-plugin npm install terser-webpack-plugin -D 然后在vue.config.js文件里写插件的配置: module.exports = { configureW

  • 使用pm2部署node生产环境的方法步骤

    一.PM2是什么 是可以用于生产环境的Nodejs的进程管理工具,并且它内置一个负载均衡.它不仅可以保证服务不会中断一直在线,并且提供0秒reload功能,还有其他一系列进程管理.监控功能.并且使用起来非常简单. 嗯嗯,最好的用处就是监控我们的生产环境下的node程序运行状态,让它给我们日以继日的处于工作状态. pm2官方文档 二.为森么要使用pm2 原始社会的我们开发node服务端程序一般过程: 编写好node程序app.js,运行node app.js;或者写入script使用npm运行:打

随机推荐