Redis cakephp collections 虚拟机 layer jwt Zeptojs lazyloadjs Font Awesome vue绑定事件 外卖系统源码 oracle查询所有数据库 bootstrap文件上传样式 kb转mb 安卓程序源代码 git登录命令 java二维数组赋值 matlab取实部 docker导入镜像 oracle分析函数 安装mysql 郑州普通话 pythonfor循环 python或运算 python传参 java基础教程 java新特性 java斐波那契数列 java方法的重载 java中数据类型 java连接mysql数据库 配置java环境 java的socket通信 java自定义异常 java线程中断 java判断 java文件复制 网页游戏代码 java项目下载 python视频教程
当前位置: 首页 > 学习教程  > 

Nodejs后端服务配置profile

2020/10/16 17:59:55 文章标签: nodejs后端开发

profile是什么? 在应用开发中, 总会遇到开发/测试/预发布/线上环境, 其环境不同, 其具体的配置项也有所不同, 不同环境的配置就可以理解为是不同的profile. 如何快速的切换各个环境配置, 进行打包配置, 成了一个小痛点. 在Java环境中如果使用maven进行打包&#x…

profile是什么?

在应用开发中, 总会遇到开发/测试/预发布/线上环境, 其环境不同, 其具体的配置项也有所不同, 不同环境的配置就可以理解为是不同的profile.

如何快速的切换各个环境配置, 进行打包配置, 成了一个小痛点. 在Java环境中如果使用maven进行打包,其自带插件就已经能很好的解决这个问题了,那么在Nodejs环境是否也有相似的工具呢?这就是接下来本问要介绍的内容了~

使用NODE_ENV来区分不同环境

  • 定义: 是nodejs用来区分不同环境的设置,这个变量可以在nodejs的进程信息中(即process对象)查到
    • process 对象是一个全局变量,它提供有关当前 Node.js 进程的信息并对其进行控制。 作为一个全局变量,它始终可供 Node.js 应用程序使用,无需使用 require()。 它也可以使用 require() 显式地访问:
    const process = require('process');
    
  • 设置方式:在不同的操作系统有不同的方式
    • linux & mac: export NODE_ENV=production
    • windows: set NODE_ENV=production
  • 使用方式:
//在需要用的地方做如下的判断
//或者把配置放在一个js文件中统一进行判断,然后需要的地方直接引用该js的变量即可
if (process.env.NODE_ENV === 'production') {
    // just for production code
}
  • 缺点:需要在部署环境上预先设定好NODE_ENV, 绑定了机器,这样不是很合理,在本地做开发时使用还差不多。如果在上线的话,万一哪天上了个新环境,没设置这个变量,系统会默认设置为development,就会产生一些预料之外的结果了

使用NPM来区分不同环境

这种方式可以看做是对NODE_ENV使用的进阶版,将NODE_ENV的设置通过不同的运行命令来实现。

使用方式:

  • 使用cross-env实现跨平台的NODE_ENV设置
  • 使用npm run COMMAND_NAME来实现对不同环境的设置. npm是nodejs使用的一种依赖管理器,具体可以查看参考链接1

例子:

{
  "name": "nodejs_demos",
  "version": "1.0.0",
  "scripts": {
    "dev": "cross-env NODE_ENV=dev nodemon src/app/app.js",
    "prod1": "cross-env NODE_ENV=product1 node src/app/app.js",
    "prod2": "cross-env NODE_ENV=product2 node src/app/app.js"
  },
  "keywords": [
    "Koa",
    "Node"
  ],
  "author": "Li Yi",
  "license": "ISC",
  "dependencies": {
    "cross-env": "^6.0.3",
    "express-validator": "^6.3.0",
    "fs.promised": "^3.0.0",
    "koa": "^2.3.0",
    "koa-body": "^2.3.0",
    "koa-bodyparser": "^4.2.1",
    "koa-compose": "^4.0.0",
    "koa-parameter": "^3.0.1",
    "koa-route": "^3.2.0",
    "koa-router": "^7.4.0",
    "koa-schema": "0.0.1",
    "koa-static": "^4.0.1",
    "log4js": "^6.1.0"
  }
}

例子说明:
* src/app/app.js是启动程序
* 想要启动xx环境的配置使用npm run xx命令即可, 譬如启动dev环境的命令就是npm run dev

代码实践

准备

git clone https://gitee.com/oschinaLiyi/nodejs_demos.git
cd nodejs_demos
npm install

以dev环境配置启动

npm run dev

启动日志如下: 可以到看到env中配置的当前的环境为dev

> nodejs_demos@1.0.0 dev /Users/liyi/workspace_java/gitee/nodejs_demos
> cross-env NODE_ENV=dev node src/app/app.js

env: {"currentEnv":"dev","logLevel":"debug"}
ready for service

执行命令

 curl http://localhost:3000/

返回当前的环境为:dev
同时控制也可以看到这样的日志:

currentEnv:dev

以prod1环境配置启动

npm run prod1

日志如下:可以到看到env中配置的当前的环境为prod1

➜  nodejs_demos git:(master) ✗ npm run prod1

> nodejs_demos@1.0.0 prod1 /Users/liyi/workspace_java/gitee/nodejs_demos
> cross-env NODE_ENV=prod1 node src/app/app.js

env: {"currentEnv":"prod1","logLevel":"info"}
ready for service

参考文档

  1. npm是什么?
  2. cross-env怎么用?
  3. process是什么?

本文链接: http://www.dtmao.cc/news_show_300258.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?