nodejs設定檔處理的方法介紹
這篇文章帶給大家的內容是關於nodejs設定檔處理的方法介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
#一般來說:一個好的專案配置應該滿足以下條件:
#依賴環境:配置根據具體運行環境從對應的檔案讀取
程式碼分離:設定項不僅可以從設定檔讀取, 也可以從環境變數讀取,使得安全隱密的設定項與程式碼分離
易於使用:配置項目應該是分層配置的,有助於查找條目和維護龐大的配置文件的,應該是容易組織和容易取得的,例如
json
結構
在多人開發nodejs 專案的時候,沒有規劃好設定方案,設定檔的問題就很容易暴露出來。
痛點
在開發nodejs 的工程中,遇到三個痛點
部署環境不同:開發、測試、生產環境的不同,導致配置的不同
開發環境不同: 開發者的開發環境配置不同,會存在同一個設定檔配置項目不同,同一文件不同內容提交,容易引起git 衝突,影響git 提交更新
#安全地配置: 有些設定不應該明文保存在專案程式碼裡面,例如資料庫密碼
解決方案
部署環境不同
#對於部署環境不同,相對容易解決,建立對應環境的設定文件,例如:
開發環境設定:developmentConfig.js
#測試環境設定:testConfig.js
生產環境配置:productionConfig.js
再建一個config.js
設定檔作為入口取得配置,如下:
module.exports = require(`./${process.env.NODE_ENV}Config.js`)
引用配置的時候,只要引用config.js
即可。
執行指令如下:
NODE_ENV=development node index.js
開發環境不同
對於開發環境不同,導致每個人的developmentConfig.js
不同,這個不能要求別人的配置和你的一樣,這樣專案就太硬了。
我們可以把developmentConfig.js
加到.gitignore
,從而從專案分離出來,再在readme.md
說明如何設定developmentConfig .js
。
最好是建立一個developmentConfig.example.js
,並在文件說明複製成developmentConfig.js
後修改設定項符合自己的開發配置。
安全地配置
對於專案一些安全性要求高的配置項,我們應該從設定檔脫離出來,只能在當前的運行進程可以獲取, 設定檔的設定項再讀取行程的設定項值,例如資料庫密碼, 一般做法如下:productionConfig.js
module.exports = { database: { user: process.env.user || 'root', password: process.env.password || 'yfwzx2019' } }
而更隱密的辦法是,你根本不知道我用環境變量覆蓋了配置項值,例如:
productionConfig.js
module.exports = { database: { user: 'root', password: 'yfwzx2019' } }
一般人拿到了這個配置,就會以為資料庫的帳號密碼就是root
、yfwzx2019
,其實最後會被環境變數的值覆蓋,運行如下:
node index.js --database_user=combine --database_password=tencent2019
當然,是要做了一些處理才可以這樣配置。
實操
方案有了,我們先來介紹以下nodejs 的設定模組rc模組
rc 模組
使用rc
模組需要定義一個appname
,選擇rc
模組是因為它會盡可能多的從appname
命名相關的地方讀取配置。
使用也很簡單,先實例一個rc 配置:
var conf = require('rc')(appname, defaultConfigObject)
##然後它會從下列清單合併配置,優先權依序合併:
- 命令列參數:--user=root 或物件形式賦值--database.user=root
- #環境變數:環境變數前綴為${appname}_的變數appname_user=root 物件形式appname_database__user=root ##指定檔案: node index.js --config file
- 預設設定檔: 從
- ./ ../ ../../ ../../../
等目錄尋找
. ${appname}rc
檔案 - $HOME/.${appname}rc
- $HOME/.${appname}/config
- $HOME/.config/${appname}
var conf = require('rc')('development', { port: 3000, }) console.log(JSON.stringify(conf)) // 1、直接运行 // node index.js // { port: 3000, _: [] } // 2、加上命令行参数 // node index.js --port=4000 --database.user=root // { port: 4000, _: [], database: { user: 'root' } } // 3、加上环境变量 // development_port=5000 development_database__password=yfwzx2019 node index.js // {"port":"5000","database":{"password":"yfwzx2019"},"_":[]} // 4、指定配置文件:根目录建一个配置文件 config.json, 内容如下 // { // "port": "6000" // } // node index.js --config=config.json // {"port":"6000","_":[],"config":"config.json","configs":["config.json"]} // 5、默认读取 ${appname}rc 文件:根目录见一个配置文件 .developmentrc 内容如下: // { // "port": 7000 // } // node index.js // {"port":7000,"_":[],"configs":[".developmentrc"],"config":".developmentrc"} // 6、 5 和4 一起运行 // node index.js --config=config.json // {"port":"6000","_":[],"config":"config.json","configs":[".developmentrc","config.json"]}
具体操作
看了 rc 模块,可以满足我们的需求,我们可以配置公共的配置项,也可以隐秘的覆盖我们的配置项。
创建配置文件目录,添加配置文件
├── config │ ├── .developmentrc.example │ ├── .productionrc │ ├── .testrc │ └── index.js
其中 .developmentrc.example 是开发环境的例子,然后开发人员参考建 .developmentrc 文件, index.js 是配置入口文件,内容如下:
let rc = require('rc') // 因为 rc 是从 process.cwd() 向上查找 .appnamerc 文件的,我们在根目录 config 文件夹里面的是找不到的,要改变工作路径到当前,再改回去 var originCwd = process.cwd() process.chdir(__dirname) var conf = rc(process.env.NODE_ENV || 'production', { // 默认的共同配置 origin: 'default', baseUrl: 'http://google.com/api', enableProxy: true, port: 3000, database: { user: 'root', password: 'yfwzx2019' } }) process.chdir(originCwd) module.exports = conf
关于部署环境的不同,获取配置通过设置环境变量
NODE_ENV
来适配关于开发环境的不同,在
.gitignore
添加config/.developmentrc
,项目代码去掉开发环境配置.developmentrc
,开发人员根据.developmentrc.example
建直接的开发配置.developmentrc
关于安全地配置,通过添加环境变量覆盖默认值,可以安全隐秘地覆盖配置项,比如:
NODE_ENV=production node index.js --database.password=tencent2019
以上是nodejs設定檔處理的方法介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

基於無阻塞、事件驅動建立的Node服務,具有記憶體消耗低的優點,非常適合處理海量的網路請求。在海量請求的前提下,就需要考慮「記憶體控制」的相關問題了。 1. V8的垃圾回收機制與記憶體限制 Js由垃圾回收機

選擇一個Node的Docker映像看起來像是小事,但是映像的大小和潛在漏洞可能會對你的CI/CD流程和安全造成重大的影響。那我們要如何選擇一個最好Node.js Docker映像呢?

Node 19已正式發布,以下這篇文章就來帶大家詳解了解Node.js 19的 6 大特性,希望對大家有幫助!

文件模組是對底層文件操作的封裝,例如文件讀寫/打開關閉/刪除添加等等文件模組最大的特點就是所有的方法都提供的**同步**和**異步**兩個版本,具有sync 字尾的方法都是同步方法,沒有的都是異

事件循環是 Node.js 的基本組成部分,透過確保主執行緒不被阻塞來實現非同步編程,了解事件循環對建立高效應用程式至關重要。以下這篇文章就來帶大家深入了解Node中的事件循環 ,希望對大家有幫助!

如何用pkg打包nodejs可執行檔?以下這篇文章跟大家介紹一下使用pkg將Node專案打包為執行檔的方法,希望對大家有幫助!
