Dieser Artikel bietet Ihnen eine Einführung in die Verarbeitung von NodeJS-Konfigurationsdateien. Ich hoffe, dass er für Freunde hilfreich ist.
Generell gesagt: Eine gute Projektkonfiguration sollte die folgenden Bedingungen erfüllen:
Abhängigkeitsumgebung : Die Konfiguration hängt vom spezifischen Betrieb ab Umgebung. Entsprechende Dateilesung
Codetrennung: Konfigurationselemente können nicht nur aus Konfigurationsdateien, sondern auch aus Umgebungsvariablen gelesen werden, wodurch Konfigurationselemente sicher und vertraulich getrennt werden aus dem Code
Einfach zu verwenden: Konfigurationselemente sollten hierarchisch konfiguriert sein, um das Auffinden von Einträgen und die Verwaltung großer Konfigurationsdateien zu erleichtern, und sollten einfach zu organisieren sein. Und diejenigen, die es sind leicht zu erhalten, wie zum Beispiel json
Struktur
Wenn mehrere Personen NodeJS-Projekte entwickeln und der Konfigurationsplan nicht geplant ist, werden Probleme mit der Konfigurationsdatei leicht aufgedeckt.
Beim Projekt zur Entwicklung von NodeJS bin ich auf drei Pain Points gestoßen
Verschiedene Bereitstellungsumgebungen: Entwicklung, Unterschiede in Test- und Produktionsumgebungen führen zu unterschiedlichen Konfigurationen
Unterschiede in Entwicklungsumgebungen: Wenn die Entwicklungsumgebungskonfiguration des Entwicklers unterschiedlich ist, gibt es unterschiedliche Konfigurationselemente für Wenn Sie dieselbe Konfigurationsdatei verwenden, kann das Senden unterschiedlicher Inhalte derselben Datei leicht zu Git-Konflikten führen und sich auf Git-Übermittlungsaktualisierungen auswirken.
Sichere Konfiguration: Einige Konfigurationen sollten nicht im Klartext gespeichert werden Text im Projektcode, z. B. Datenbankkennwort
Für unterschiedliche Bereitstellungsumgebungen ist die Lösung relativ einfach. Erstellen Sie eine Konfigurationsdatei für die entsprechende Umgebung, wie zum Beispiel:
Entwicklungsumgebungskonfiguration: developmentConfig.js
Testumgebungskonfiguration: testConfig.js
Produktionsumgebungskonfiguration: ProductionConfig.js
Erstellen Sie eine weitere config.js
Konfigurationsdatei als Eingang, um die Konfiguration wie folgt zu erhalten:
module.exports = require(`./${process.env.NODE_ENV}Config.js`)
Wenn Sie auf die Konfiguration verweisen, zitieren Sie einfach config.js
, das heißt Can.
Führen Sie den Befehl wie folgt aus:
NODE_ENV=development node index.js
Unterschiedliche Entwicklungsumgebungen führen zu unterschiedlichen developmentConfig.js
für jede Person. Sie können nicht andere fragen dafür Die Konfiguration ist die gleiche wie bei Ihnen, daher wird das Projekt zu schwierig sein.
Wir können developmentConfig.js
zu .gitignore
hinzufügen, um es vom Projekt zu trennen, und dann erklären, wie readme.md
in developmentConfig.js
konfiguriert wird.
Am besten erstellen Sie ein developmentConfig.example.js
und ändern die Konfigurationselemente so, dass sie Ihrer eigenen Entwicklungskonfiguration entsprechen, nachdem Sie die Dokumentbeschreibung in developmentConfig.js
kopiert haben.
Für einige Konfigurationselemente mit hohen Sicherheitsanforderungen im Projekt sollten wir sie von der Konfigurationsdatei trennen, die nur im aktuell laufenden Prozess abgerufen werden kann Die Konfigurationsdatei lautet dann Um den Konfigurationselementwert des Prozesses zu lesen, z. B. das Datenbankkennwort, lautet die allgemeine Methode wie folgt: productionConfig.js
module.exports = { database: { user: process.env.user || 'root', password: process.env.password || 'yfwzx2019' } }
Die geheimere Methode ist, dass Sie dies nicht tun Ich weiß sogar, dass ich den Wert des Konfigurationselements mit Umgebungsvariablen überschrieben habe. Zum Beispiel:
productionConfig.js
module.exports = { database: { user: 'root', password: 'yfwzx2019' } }
Wenn die meisten Leute diese Konfiguration erhalten, werden sie denken, dass das Passwort des Datenbankkontos , root
Tatsächlich wird es am Ende durch den Wert der Umgebungsvariablen überschrieben. Die Operation ist wie folgt: yfwzx2019
node index.js --database_user=combine --database_password=tencent2019
Natürlich einige Es muss eine Verarbeitung durchgeführt werden, bevor es auf diese Weise konfiguriert werden kann. Praktische Bedienung Nachdem wir nun den Plan haben, stellen wir zunächst das folgende NodeJS-Konfigurationsmodul vor: RC-Modul RC-Modul Verwenden Sie Für das Modul ist die Definition A rc
erforderlich. Wählen Sie das Modul appname
, da es so viel Konfiguration wie möglich von Stellen liest, die mit der Benennung rc
zusammenhängen. appname
Es ist auch sehr einfach, zunächst eine RC-Konfiguration zu verwenden:
var conf = require('rc')(appname, defaultConfigObject)
Dann werden die Konfigurationen aus der folgenden Liste zusammengeführt und die Priorität wird zusammengeführt Reihenfolge: und anderen Verzeichnissen zur Suche nach ./ ../ ../../ ../../../
-Dateien 🎜>.${appname}rc
$HOME/.${appname}rc
$HOME/.${appname}/config
$HOME/.config/${appname}
Ich habe eine Demo erstellt, um es intuitiver zu machen$HOME/.config/${appname}/config
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
Das obige ist der detaillierte Inhalt vonEinführung in die Verarbeitungsmethoden der NodeJS-Konfigurationsdatei. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!