Table des matières
Pain Points
Solution
Différents environnements de déploiement
Différents environnements de développement
Configuration sécurisée
具体操作
Maison interface Web js tutoriel Introduction aux méthodes de traitement des fichiers de configuration nodejs

Introduction aux méthodes de traitement des fichiers de configuration nodejs

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

Cet article vous apporte une introduction à la méthode de traitement des fichiers de configuration nodejs. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.

De manière générale : une bonne configuration de projet doit répondre aux conditions suivantes :

  1. Environnement de dépendance  : La configuration dépend du fonctionnement spécifique Environnement. Lecture des fichiers correspondants

  2. Séparation de code : Les éléments de configuration peuvent être lus non seulement à partir des fichiers de configuration, mais également à partir des variables d'environnement, ce qui rend les éléments de configuration sûrs et confidentiels. à partir du code

  3. Facile à utiliser : les éléments de configuration doivent être configurés de manière hiérarchique pour aider à trouver des entrées et à conserver d'énormes fichiers de configuration, et doivent être faciles à organiser. Et ceux qui le sont facile à obtenir, comme jsonStructure

Lorsque plusieurs personnes développent des projets nodejs, si le plan de configuration n'est pas planifié, des problèmes avec le fichier de configuration seront facilement exposés.

Pain Points

Dans le projet de développement de nodejs, j'ai rencontré trois points douloureux

  1. Différents environnements de déploiement : développement, Les différences dans les environnements de test et de production conduisent à des configurations différentes

  2. Différences dans les environnements de développement : Si la configuration de l'environnement de développement du développeur est différente, il y aura différents éléments de configuration pour le même fichier de configuration, la soumission de contenus différents du même fichier peut facilement provoquer des conflits git et affecter les mises à jour de soumission git

  3. Configuration sécurisée : Certaines configurations ne doivent pas être enregistrées en clair texte dans le code du projet, tel que Mot de passe de la base de données

Solution

Différents environnements de déploiement

Pour différents environnements de déploiement, il est relativement facile à résoudre. Créez un fichier de configuration pour l'environnement correspondant, tel que :

  1. Configuration de l'environnement de développement : developmentConfig.js

  2. Configuration de l'environnement de test : testConfig.js

  3. Configuration de l'environnement de production : productionConfig.js

Créez un autre config.js fichier de configuration comme entrée pour obtenir la configuration, comme suit :

module.exports = require(`./${process.env.NODE_ENV}Config.js`)
Copier après la connexion

Lorsque vous citez la configuration, citez simplement config.js C'est tout.
Exécutez la commande comme suit :

NODE_ENV=development node index.js

Différents environnements de développement

Pour différents environnements de développement, chacun developmentConfig.js est différent. Vous ne pouvez pas demander aux autres. cette La configuration est la même que la vôtre, donc le projet sera trop dur.
Nous pouvons ajouter developmentConfig.js à .gitignore pour le séparer du projet, puis expliquer comment configurer readme.md dans developmentConfig.js.
Il est préférable de créer un developmentConfig.example.js et de modifier les éléments de configuration pour qu'ils correspondent à votre propre configuration de développement après avoir copié la description du document dans developmentConfig.js.

Configuration sécurisée

Pour certains éléments de configuration ayant des exigences de sécurité élevées dans le projet, nous devons les séparer du fichier de configuration, qui ne peut être obtenu que dans le processus en cours. le fichier de configuration est alors Pour lire les valeurs des éléments de configuration du processus, comme le mot de passe de la base de données, la méthode générale est la suivante :
productionConfig.js

module.exports = {
    database: {
        user: process.env.user || 'root',
        password: process.env.password || 'yfwzx2019'
    }
}
Copier après la connexion

La manière la plus secrète est la suivante vous ne savez même pas que j'ai remplacé l'élément de configuration par des variables d'environnement. Valeur, par exemple :

productionConfig.js

module.exports = {
    database: {
        user: 'root',
        password: 'yfwzx2019'
    }
}
Copier après la connexion

Lorsque la plupart des gens auront cette configuration, ils réfléchiront. que le mot de passe du compte de base de données est root, yfwzx2019. En fait, il sera finalement modifié par la variable d'environnement. La couverture des valeurs est la suivante :

node index.js --database_user=combine --database_password=tencent2019
Bien sûr, quelques traitements sont nécessaires avant de pouvoir être configuré ainsi.

Fonctionnement pratique

Maintenant que nous avons le plan, introduisons d'abord le module de configuration nodejs suivant module rc

module rc

Utilisation du

le module nécessite la définition A rc, choisissez le module appname car il lira autant de configuration que possible à partir des endroits liés au nommage rc. appnameIl est également très simple à utiliser. Première instance d'une configuration rc :

var conf = require('rc')(appname, defaultConfigObject)
Ensuite, il fusionnera les configurations de la liste suivante, et la priorité sera fusionnée dans order :

  1. Paramètres de ligne de commande : --user=root ou affectation de formulaire d'objet--database.user=root

  2. Variables d'environnement : Les Le préfixe de la variable d'environnement est ${appname}_ La variable appname_user=root a la forme d'objet appname_database__user=root

  3. Fichier spécifié : node index.js --config file

  4. Fichier de configuration par défaut : depuis

    et d'autres répertoires pour rechercher des fichiers ./ ../ ../../ ../../../ 🎜>.${appname}rc

  5. $HOME/.${appname}rc

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

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

  8. J'ai fait une démo pour la rendre plus intuitive$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"]}
    Copier après la connexion

    具体操作

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

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

    ├── config
    │   ├── .developmentrc.example
    │   ├── .productionrc
    │   ├── .testrc
    │   └── index.js
    Copier après la connexion

    其中 .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
    Copier après la connexion
    1. 关于部署环境的不同,获取配置通过设置环境变量NODE_ENV来适配

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

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

    NODE_ENV=production node index.js --database.password=tencent2019


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Explication graphique détaillée de la mémoire et du GC du moteur Node V8 Explication graphique détaillée de la mémoire et du GC du moteur Node V8 Mar 29, 2023 pm 06:02 PM

Cet article vous donnera une compréhension approfondie de la mémoire et du garbage collector (GC) du moteur NodeJS V8. J'espère qu'il vous sera utile !

Un article pour parler du contrôle de la mémoire dans Node Un article pour parler du contrôle de la mémoire dans Node Apr 26, 2023 pm 05:37 PM

Le service Node construit sur une base non bloquante et piloté par les événements présente l'avantage d'une faible consommation de mémoire et est très adapté à la gestion de requêtes réseau massives. Dans le contexte de demandes massives, les questions liées au « contrôle de la mémoire » doivent être prises en compte. 1. Le mécanisme de récupération de place du V8 et les limitations de mémoire Js sont contrôlés par la machine de récupération de place

Parlons de la façon de choisir la meilleure image Docker Node.js ? Parlons de la façon de choisir la meilleure image Docker Node.js ? Dec 13, 2022 pm 08:00 PM

Le choix d'une image Docker pour Node peut sembler trivial, mais la taille et les vulnérabilités potentielles de l'image peuvent avoir un impact significatif sur votre processus CI/CD et votre sécurité. Alors, comment choisir la meilleure image Docker Node.js ?

Parlons en profondeur du module File dans Node Parlons en profondeur du module File dans Node Apr 24, 2023 pm 05:49 PM

Le module de fichiers est une encapsulation des opérations de fichiers sous-jacentes, telles que l'ajout de lecture/écriture/ouverture/fermeture/suppression de fichiers, etc. La plus grande caractéristique du module de fichiers est que toutes les méthodes fournissent deux versions de **synchrone** et ** asynchrone**, with Les méthodes avec le suffixe sync sont toutes des méthodes de synchronisation, et celles qui n'en ont pas sont toutes des méthodes hétérogènes.

Node.js 19 est officiellement sorti, parlons de ses 6 fonctionnalités majeures ! Node.js 19 est officiellement sorti, parlons de ses 6 fonctionnalités majeures ! Nov 16, 2022 pm 08:34 PM

Node 19 est officiellement publié. Cet article vous donnera une explication détaillée des 6 fonctionnalités majeures de Node.js 19. J'espère qu'il vous sera utile !

Parlons du mécanisme GC (garbage collection) dans Node.js Parlons du mécanisme GC (garbage collection) dans Node.js Nov 29, 2022 pm 08:44 PM

Comment Node.js fait-il le GC (garbage collection) ? L’article suivant vous guidera à travers cela.

Parlons de la boucle d'événements dans Node Parlons de la boucle d'événements dans Node Apr 11, 2023 pm 07:08 PM

La boucle d'événements est un élément fondamental de Node.js et permet une programmation asynchrone en garantissant que le thread principal n'est pas bloqué. Comprendre la boucle d'événements est crucial pour créer des applications efficaces. L'article suivant vous donnera une compréhension approfondie de la boucle d'événements dans Node. J'espère qu'il vous sera utile !

Que dois-je faire si le nœud ne peut pas utiliser la commande npm ? Que dois-je faire si le nœud ne peut pas utiliser la commande npm ? Feb 08, 2023 am 10:09 AM

La raison pour laquelle le nœud ne peut pas utiliser la commande npm est que les variables d'environnement ne sont pas configurées correctement. La solution est la suivante : 1. Ouvrez "Propriétés système" ; 2. Recherchez "Variables d'environnement" -> "Variables système", puis modifiez l'environnement. variables ; 3. Recherchez l'emplacement du dossier nodejs ; 4. Cliquez sur "OK".

See all articles