Heim  >  Artikel  >  Web-Frontend  >  Einführung in die Verarbeitungsmethoden der NodeJS-Konfigurationsdatei

Einführung in die Verarbeitungsmethoden der NodeJS-Konfigurationsdatei

不言
不言nach vorne
2019-01-02 09:51:033959Durchsuche

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:

  1. Abhängigkeitsumgebung : Die Konfiguration hängt vom spezifischen Betrieb ab Umgebung. Entsprechende Dateilesung

  2. Codetrennung: Konfigurationselemente können nicht nur aus Konfigurationsdateien, sondern auch aus Umgebungsvariablen gelesen werden, wodurch Konfigurationselemente sicher und vertraulich getrennt werden aus dem Code

  3. 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 jsonStruktur

Wenn mehrere Personen NodeJS-Projekte entwickeln und der Konfigurationsplan nicht geplant ist, werden Probleme mit der Konfigurationsdatei leicht aufgedeckt.

Pain Points

Beim Projekt zur Entwicklung von NodeJS bin ich auf drei Pain Points gestoßen

  1. Verschiedene Bereitstellungsumgebungen: Entwicklung, Unterschiede in Test- und Produktionsumgebungen führen zu unterschiedlichen Konfigurationen

  2. 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.

  3. Sichere Konfiguration: Einige Konfigurationen sollten nicht im Klartext gespeichert werden Text im Projektcode, z. B. Datenbankkennwort

Lösung

Verschiedene Bereitstellungsumgebungen

Für unterschiedliche Bereitstellungsumgebungen ist die Lösung relativ einfach. Erstellen Sie eine Konfigurationsdatei für die entsprechende Umgebung, wie zum Beispiel:

  1. Entwicklungsumgebungskonfiguration: developmentConfig.js

  2. Testumgebungskonfiguration: testConfig.js

  3. 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

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.

Sichere Konfiguration

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. appnameEs 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:

  1. Befehlszeilenparameter: --user=root oder Objektformzuweisung--database.user=root

  2. Umgebungsvariablen: Die Das Präfix der Umgebungsvariablen lautet ${appname}_. Die Variable appname_user=root hat die Objektform appname_database__user=root

  3. Angegebene Datei: node index.js --config file

  4. Standardkonfigurationsdatei: Von

    und anderen Verzeichnissen zur Suche nach ./ ../ ../../ ../../../-Dateien 🎜>.${appname}rc

  5. $HOME/.${appname}rc

  6. $HOME/.${appname}/config

  7. $HOME/.config/${appname}

  8. 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 模块,可以满足我们的需求,我们可以配置公共的配置项,也可以隐秘的覆盖我们的配置项。

    1. 创建配置文件目录,添加配置文件

    ├── 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
    1. 关于部署环境的不同,获取配置通过设置环境变量NODE_ENV来适配

    2. 关于开发环境的不同,在.gitignore添加config/.developmentrc,项目代码去掉开发环境配置.developmentrc,开发人员根据.developmentrc.example建直接的开发配置.developmentrc

    3. 关于安全地配置,通过添加环境变量覆盖默认值,可以安全隐秘地覆盖配置项,比如:

    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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen