這篇文章主要介紹nodejs怎么處理配置文件,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
專(zhuān)注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)南潯免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千余家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
一般來(lái)說(shuō):一個(gè)好的項(xiàng)目配置應(yīng)該滿(mǎn)足以下條件:
依賴(lài)環(huán)境:配置根據(jù)具體運(yùn)行環(huán)境從相應(yīng)的文件讀取
代碼分離:配置項(xiàng)不僅可以從配置文件讀取, 也可以從環(huán)境變量讀取,使得安全隱秘的配置項(xiàng)與代碼分離
易于使用:配置項(xiàng)應(yīng)該是分層配置的,有助于查找條目和維護(hù)龐大的配置文件的,應(yīng)該是容易組織和容易獲取的,比如json
結(jié)構(gòu)
在多人開(kāi)發(fā) nodejs 項(xiàng)目的時(shí)候,沒(méi)有規(guī)劃好配置方案,配置文件的問(wèn)題就很容易暴露出來(lái)。
在開(kāi)發(fā) nodejs 的工程中,遇到過(guò)三個(gè)痛點(diǎn)
部署環(huán)境不同: 開(kāi)發(fā)、測(cè)試、生產(chǎn)環(huán)境的不同,導(dǎo)致配置的不同
開(kāi)發(fā)環(huán)境不同: 開(kāi)發(fā)者的開(kāi)發(fā)環(huán)境配置不同,會(huì)存在同一個(gè)配置文件配置項(xiàng)不同,同一文件不同內(nèi)容提交,容易引起 git 沖突,影響 git 提交更新
安全地配置: 一些配置不應(yīng)該明文保存在項(xiàng)目代碼里面,比如數(shù)據(jù)庫(kù)密碼
對(duì)于部署環(huán)境不同,相對(duì)容易解決,建立相應(yīng)環(huán)境的配置文件,比如:
開(kāi)發(fā)環(huán)境配置:developmentConfig.js
測(cè)試環(huán)境配置:testConfig.js
生產(chǎn)環(huán)境配置:productionConfig.js
再建一個(gè)config.js
配置文件作為入口獲取配置,如下:
module.exports = require(`./${process.env.NODE_ENV}Config.js`)
引用配置的時(shí)候,只要引用 config.js
即可。
運(yùn)行命令如下:
NODE_ENV=development node index.js
對(duì)于開(kāi)發(fā)環(huán)境不同,導(dǎo)致每個(gè)人的developmentConfig.js
不同,這個(gè)不能要求別人的配置和你的一樣,這樣項(xiàng)目就太硬了。
我們可以把developmentConfig.js
添加到.gitignore
,從而從項(xiàng)目分離出來(lái),再在readme.md
說(shuō)明如何配置developmentConfig.js
。
最好是建立一個(gè)developmentConfig.example.js
,并在文檔說(shuō)明復(fù)制成developmentConfig.js
后修改配置項(xiàng)符合自己的開(kāi)發(fā)配置。
對(duì)于項(xiàng)目一些安全性要求高的配置項(xiàng),我們應(yīng)該從配置文件脫離出來(lái),只能在當(dāng)前的運(yùn)行進(jìn)程可以獲取, 配置文件的配置項(xiàng)再讀取進(jìn)程的配置項(xiàng)值,比如數(shù)據(jù)庫(kù)密碼, 一般做法如下:productionConfig.js
module.exports = { database: { user: process.env.user || 'root', password: process.env.password || 'yfwzx2019' } }
而更隱秘的辦法是,你根本不知道我用環(huán)境變量覆蓋了配置項(xiàng)值,比如:
productionConfig.js
module.exports = { database: { user: 'root', password: 'yfwzx2019' } }
一般人拿到了這個(gè)配置,就會(huì)以為數(shù)據(jù)庫(kù)的賬號(hào)密碼就是root
、yfwzx2019
,其實(shí)最后會(huì)被環(huán)境變量的值覆蓋,運(yùn)行如下:
node index.js --database_user=combine --database_password=tencent2019
當(dāng)然,是要做了一些處理才可以這樣配置。
方案有了,我們先來(lái)介紹以下 nodejs 的配置模塊 rc模塊
使用rc
模塊需要定義一個(gè)appname
,選擇rc
模塊是因?yàn)樗鼤?huì)盡可能多的從appname
命名相關(guān)的地方讀取配置。
使用也很簡(jiǎn)單,先實(shí)例一個(gè) rc 配置:
var conf = require('rc')(appname, defaultConfigObject)
然后它會(huì)從下面列表合并配置,優(yōu)先級(jí)按順序合并:
命令行參數(shù):--user=root 或者對(duì)象形式賦值 --database.user=root
環(huán)境變量: 環(huán)境變量前綴為${appname}_的變量 appname_user=root 對(duì)象形式 appname_database__user=root
指定文件: node index.js --config file
默認(rèn)配置文件: 從 ./ ../ ../../ ../../../
等目錄查找.${appname}rc
文件
$HOME/.${appname}rc
$HOME/.${appname}/config
$HOME/.config/${appname}
$HOME/.config/${appname}/config
/etc/${appname}rc
/etc/${appname}/config
做了個(gè) demo, 直觀一點(diǎn)
var conf = require('rc')('development', { port: 3000, }) console.log(JSON.stringify(conf)) // 1、直接運(yùn)行 // node index.js // { port: 3000, _: [] } // 2、加上命令行參數(shù) // node index.js --port=4000 --database.user=root // { port: 4000, _: [], database: { user: 'root' } } // 3、加上環(huán)境變量 // development_port=5000 development_database__password=yfwzx2019 node index.js // {"port":"5000","database":{"password":"yfwzx2019"},"_":[]} // 4、指定配置文件:根目錄建一個(gè)配置文件 config.json, 內(nèi)容如下 // { // "port": "6000" // } // node index.js --config=config.json // {"port":"6000","_":[],"config":"config.json","configs":["config.json"]} // 5、默認(rèn)讀取 ${appname}rc 文件:根目錄見(jiàn)一個(gè)配置文件 .developmentrc 內(nèi)容如下: // { // "port": 7000 // } // node index.js // {"port":7000,"_":[],"configs":[".developmentrc"],"config":".developmentrc"} // 6、 5 和4 一起運(yùn)行 // node index.js --config=config.json // {"port":"6000","_":[],"config":"config.json","configs":[".developmentrc","config.json"]}
看了 rc 模塊,可以滿(mǎn)足我們的需求,我們可以配置公共的配置項(xiàng),也可以隱秘的覆蓋我們的配置項(xiàng)。
創(chuàng)建配置文件目錄,添加配置文件
├── config │ ├── .developmentrc.example │ ├── .productionrc │ ├── .testrc │ └── index.js
其中 .developmentrc.example 是開(kāi)發(fā)環(huán)境的例子,然后開(kāi)發(fā)人員參考建 .developmentrc 文件, index.js 是配置入口文件,內(nèi)容如下:
let rc = require('rc') // 因?yàn)?rc 是從 process.cwd() 向上查找 .appnamerc 文件的,我們?cè)诟夸?config 文件夾里面的是找不到的,要改變工作路徑到當(dāng)前,再改回去 var originCwd = process.cwd() process.chdir(__dirname) var conf = rc(process.env.NODE_ENV || 'production', { // 默認(rèn)的共同配置 origin: 'default', baseUrl: 'http://google.com/api', enableProxy: true, port: 3000, database: { user: 'root', password: 'yfwzx2019' } }) process.chdir(originCwd) module.exports = conf
關(guān)于部署環(huán)境的不同,獲取配置通過(guò)設(shè)置環(huán)境變量NODE_ENV
來(lái)適配
關(guān)于開(kāi)發(fā)環(huán)境的不同,在.gitignore
添加config/.developmentrc
,項(xiàng)目代碼去掉開(kāi)發(fā)環(huán)境配置.developmentrc
,開(kāi)發(fā)人員根據(jù).developmentrc.example
建直接的開(kāi)發(fā)配置.developmentrc
關(guān)于安全地配置,通過(guò)添加環(huán)境變量覆蓋默認(rèn)值,可以安全隱秘地覆蓋配置項(xiàng),比如:
NODE_ENV=production node index.js --database.password=tencent2019
以上是“nodejs怎么處理配置文件”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!