运行环境配置
我们书写的代码一般有三种运行环境:
- 开发环境
- 生产环境
- 测试环境
有的时候,我们可能需要在 node 代码中根据不同的环境做出不同的处理
如何优雅的让 node 知道处于什么环境,是极其重要的
通常我们使用如下的处理方式:
node中有一个全局变量 global (可以类比浏览器环境的window),该变量是一个对象,对象中的所有属性均可以直接使用
global有一个属性是process,该属性是一个对象,包含了当前运行node程序的计算机的很多信息,其中有一个信息是env,是一个对象,包含了计算机中所有的系统变量
通常,我们通过系统变量 NODE_ENV 的值,来判定node程序处于何种环境
有两种方式设置 NODE_ENV 的值
- 永久设置
- 临时设置
我们一般使用临时设置
因此,我们可以配置 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//新增的字段
}