Inhaltsverzeichnis
Pain Points
Lösung
Verschiedene Bereitstellungsumgebungen
Unterschiedliche Entwicklungsumgebungen
Sichere Konfiguration
具体操作
Heim Web-Frontend js-Tutorial Einführung in die Verarbeitungsmethoden der NodeJS-Konfigurationsdatei

Einführung in die Verarbeitungsmethoden der NodeJS-Konfigurationsdatei

Jan 02, 2019 am 09:51 AM
node.js

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`)
Nach dem Login kopieren

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'
    }
}
Nach dem Login kopieren

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'
    }
}
Nach dem Login kopieren

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"]}
    Nach dem Login kopieren

    具体操作

    看了 rc 模块,可以满足我们的需求,我们可以配置公共的配置项,也可以隐秘的覆盖我们的配置项。

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

    ├── config
    │   ├── .developmentrc.example
    │   ├── .productionrc
    │   ├── .testrc
    │   └── index.js
    Nach dem Login kopieren

    其中 .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
    Nach dem Login kopieren
    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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Detaillierte grafische Erläuterung des Speichers und des GC der Node V8-Engine Detaillierte grafische Erläuterung des Speichers und des GC der Node V8-Engine Mar 29, 2023 pm 06:02 PM

Dieser Artikel vermittelt Ihnen ein detailliertes Verständnis des Speichers und Garbage Collectors (GC) der NodeJS V8-Engine. Ich hoffe, er wird Ihnen hilfreich sein!

Ein Artikel über Speichersteuerung in Node Ein Artikel über Speichersteuerung in Node Apr 26, 2023 pm 05:37 PM

Der nicht blockierende und ereignisgesteuerte Knotendienst hat den Vorteil eines geringen Speicherverbrauchs und eignet sich sehr gut für die Verarbeitung massiver Netzwerkanforderungen. Unter der Voraussetzung massiver Anfragen müssen Probleme im Zusammenhang mit der „Speicherkontrolle“ berücksichtigt werden. 1. Der Garbage-Collection-Mechanismus und die Speicherbeschränkungen von V8 Js wird von der Garbage-Collection-Maschine gesteuert

Lassen Sie uns darüber sprechen, wie Sie das beste Node.js-Docker-Image auswählen. Lassen Sie uns darüber sprechen, wie Sie das beste Node.js-Docker-Image auswählen. Dec 13, 2022 pm 08:00 PM

Die Auswahl eines Docker-Images für Node mag trivial erscheinen, aber die Größe und potenziellen Schwachstellen des Images können erhebliche Auswirkungen auf Ihren CI/CD-Prozess und Ihre Sicherheit haben. Wie wählen wir also das beste Node.js-Docker-Image aus?

Lassen Sie uns ausführlich über das File-Modul in Node sprechen Lassen Sie uns ausführlich über das File-Modul in Node sprechen Apr 24, 2023 pm 05:49 PM

Das Dateimodul ist eine Kapselung der zugrunde liegenden Dateioperationen, wie z. B. Lesen/Schreiben/Öffnen/Schließen/Löschen von Dateien, Hinzufügen usw. Das größte Merkmal des Dateimoduls besteht darin, dass alle Methoden zwei Versionen von **synchronem** und **bereitstellen. asynchron**, mit Methoden mit dem Suffix sync sind alle Synchronisationsmethoden, und diejenigen ohne sind alle heterogene Methoden.

Node.js 19 ist offiziell veröffentlicht, lassen Sie uns über seine 6 Hauptfunktionen sprechen! Node.js 19 ist offiziell veröffentlicht, lassen Sie uns über seine 6 Hauptfunktionen sprechen! Nov 16, 2022 pm 08:34 PM

Node 19 wurde offiziell veröffentlicht. Dieser Artikel wird Ihnen eine detaillierte Erklärung der 6 Hauptfunktionen von Node.js 19 geben. Ich hoffe, er wird Ihnen hilfreich sein!

Lassen Sie uns über den GC-Mechanismus (Garbage Collection) in Node.js sprechen Lassen Sie uns über den GC-Mechanismus (Garbage Collection) in Node.js sprechen Nov 29, 2022 pm 08:44 PM

Wie führt Node.js GC (Garbage Collection) durch? Der folgende Artikel führt Sie durch.

Lassen Sie uns über die Ereignisschleife in Node sprechen Lassen Sie uns über die Ereignisschleife in Node sprechen Apr 11, 2023 pm 07:08 PM

Die Ereignisschleife ist ein grundlegender Bestandteil von Node.js und ermöglicht die asynchrone Programmierung, indem sie sicherstellt, dass der Hauptthread nicht blockiert wird. Das Verständnis der Ereignisschleife ist für die Erstellung effizienter Anwendungen von entscheidender Bedeutung. Der folgende Artikel wird Ihnen ein detailliertes Verständnis der Ereignisschleife in Node vermitteln. Ich hoffe, er wird Ihnen hilfreich sein!

Was soll ich tun, wenn der Knoten den Befehl npm nicht verwenden kann? Was soll ich tun, wenn der Knoten den Befehl npm nicht verwenden kann? Feb 08, 2023 am 10:09 AM

Der Grund, warum der Knoten den Befehl npm nicht verwenden kann, liegt darin, dass die Umgebungsvariablen nicht richtig konfiguriert sind. Die Lösung ist: 1. Öffnen Sie „Systemeigenschaften“ 2. Suchen Sie nach „Umgebungsvariablen“ -> „Systemvariablen“ und bearbeiten Sie dann die Umgebung Variablen; 3. Suchen Sie den Speicherort des NodeJS-Ordners. 4. Klicken Sie auf „OK“.

See all articles