Maison  >  Article  >  interface Web  >  Introduction aux méthodes de traitement des fichiers de configuration nodejs

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

不言
不言avant
2019-01-02 09:51:034021parcourir

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`)

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'
    }
}

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'
    }
}

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"]}

    具体操作

    看了 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


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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer