Skip to content

运行环境配置

我们书写的代码一般有三种运行环境:

  1. 开发环境
  2. 生产环境
  3. 测试环境

有的时候,我们可能需要在 node 代码中根据不同的环境做出不同的处理

如何优雅的让 node 知道处于什么环境,是极其重要的

通常我们使用如下的处理方式:

node中有一个全局变量 global (可以类比浏览器环境的window),该变量是一个对象,对象中的所有属性均可以直接使用

global有一个属性是process,该属性是一个对象,包含了当前运行node程序的计算机的很多信息,其中有一个信息是env,是一个对象,包含了计算机中所有的系统变量

通常,我们通过系统变量 NODE_ENV 的值,来判定node程序处于何种环境

有两种方式设置 NODE_ENV 的值

  1. 永久设置
  2. 临时设置

我们一般使用临时设置

因此,我们可以配置 scripts 脚本,在设置好了 NODE_ENV 后启动程序

为了避免不同系统的设置方式的差异,可以使用第三方库 cross-env 对环境变量进行设置

js
// node 中有一个全局变量global,类似于浏览器中的window,里面有一个process对象,可以访问到计算机当前的环境变量.

/*
设置环境变量有3种方式:
1.全局,点击计算机--环境变量--添加NODE_ENV

2.临时设置,在package.json中,script中使用:
"start":"set NODE_ENV=development&&node index.js"
    --set 是使用的windows下的命令,在script中可以使用cmd中全部的命令

3.第三方库:cross-env(这个可以让第三方库自动判断是windows还是mac环境)
 */

console.log(process.env.NODE_ENV); //developemnt

let a = "没有环境变量";

if (process.env.NODE_ENV === "development") {
  a = "开发环境";
} else if (process.env.NODE_ENV === "production") {
  a = "生产环境";
} else if (process.env.NODE_ENV === "test") {
  a = "测试环境";
}
console.log("a", a);

package.json

json
{
  "name": "homework",
  "version": "1.0.0",
  "main": "index.js",
  "scripts": {
      //设置环境变量,用来区分开发、生产、测试环境
    "start": "cross-env NODE_ENV=development node index.js",
    "build": "cross-env NODE_ENV=production node index.js",
    "test": "cross-env NODE_ENV=test node index.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "description": "",
  "devDependencies": {
    "cross-env": "^7.0.3"
  }
}

在node中读取package.json

有的时候,我们可能在 package.json 中配置一些自定义的字段,这些字段需要在node中读取

在node 中,可以直接导入一个json格式的文件,它会自动将其转换为js对象

js
/* 2.node读取json文件 */
const config = require("./package.json");
console.log(config);

/*
{
  name: 'homework',
  version: '1.0.0',
  main: 'index.js',
  scripts: {
    start: 'cross-env NODE_ENV=development node index.js',
    build: 'cross-env NODE_ENV=production node index.js',
    test: 'cross-env NODE_ENV=test node index.js'
  },
  keywords: [],
  author: '',
  license: 'ISC',
  description: '',
  devDependencies: { 'cross-env': '^7.0.3' }
}
*/

也可以在package.json增加一些自定义的字段,方便node的读取

package.json

json
{
    "name": "chapter2",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "scripts": {
        "start": "cross-env NODE_ENV=development node index.js",
        "build": "cross-env NODE_ENV=production node index.js",
        "test": "cross-env NODE_ENV=test node index.js"
    },
    "author": "",
    "license": "ISC",
    "devDependencies": {
        "cross-env": "^6.0.3"
    },
    "a": 123//新增的字段
}

MIT License