在任何一个项目中都缺少不了配置文件
具有下面的特点: 数据量不大,信息需要长期保存,容易维护
现在是大前端的时代,Node 的重要性不言而喻。在使用 Node 作为后端或者中间层的技术架构时,往往需要用到一些可配置的变量,比如数据库,在开发时我们会连开发的数据库,生成环境我们需要连生产的数据库,这样我们就需要根据不同的环境加载不一样的配置文件,从而提高我们的开发效率,接下来我们就一起来定制我们的配置文件。
环境变量
在 Node 中可以通过 process.env
来访问当前的环境变量信息。
比如我们在 package.json
中通过 scripts
定义的shell脚本执行对应的命令。
1 | // package.json |
可以看到,上面有三条条启动命令,一条是默认的 start
,另外两条我们通过 NODE_ENV=xxx
来设置了对应的环境,当我们使用 npm run dev
启动项目的时候,通过 process.env.NODE_ENV
就可以取到项目的当前环境。
通过环境变量指定对应的配置文件
在上面我们通过shell脚本指定了对应的环境,那我们就可以通过 process.env.NODE_ENV
来加载对应的配置文件了。
1 | // config/index.js |
这样,我们就可以开开心心的放心的写代码了,但这样写还不是很优雅,都写到一个文件里了,不太好维护,接下来我们就真正的动态加载,不需要我们再加判断了。
config-lite
config-lite: A super simple & flexible & intuitive config module, support yaml & toml.
这一次,我们针对不同的环境,将配置写入不同的配置文件中,在项目根目录下新建config目录,里面新建不同环境的配置文件:default.js、dev.js和pro.js。
1 | // default.js |
好了,配置文件写好了,如何使用呢?这里我们使用的 config-lite
插件,这个插件依旧是依据我们shell脚本指定的对应环境来选择不同的配置文件。
Install
1 | $ npm i config-lite --save |
当我们使用 npm run dev
启动项目的时候,config-lite
会去抓取dev.js配置,并且会与default.js里配置去合并,如果有相同的对象,会覆盖default.js里的配置。同理 npm run pro
Usage
1 | // app.js |
至此,我们就得到了更好维护的动态加载配置文件。还有一个问题
(大多数情况下,在windows平台下使用类似于: NODE_ENV=pro的命令行指令会卡住,windows平台与POSIX在使用命令行时有许多区别(例如在POSIX,使用$ENV_VAR,在windows,使用%ENV_VAR%。。。))。那该如何解决呢?👇
cross-env
cross-env 让这一切变得简单,不同平台使用唯一指令,无需担心跨平台问题
Install
1 | $ npm i cross-env --save |
Usage
1 | // package.json |
这样 NODE_ENV 便设置成功,无需担心跨平台问题。
egg 配置文件的使用
在 config 目录(脚手架生成的)新增 config.dev.js 和 config.pro.js,然后在文件内写我们对应环境的配置。
配置环境
1
2
3
4
5
6
7
8
9
10
11// package.json
{
...
"script": {
...
"dev": "EGG_SERVER_ENV=dev egg-bin dev",
"pro": "EGG_SERVER_ENV=pro egg-scripts start",
...
}
...
}在 egg 中通过
EGG_SERVER_ENV
来声明对应的环境变量。使用
1
const config = this.app.config // 得到对应环境的配置文件(也会和 default 进行合并)
完结,好久没写了,有点生疏了,苦笑!!!