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 :
Environnement de dépendance : La configuration dépend du fonctionnement spécifique Environnement. Lecture des fichiers correspondants
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
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 json
Structure
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.
Dans le projet de développement de nodejs, j'ai rencontré trois points douloureux
Différents environnements de déploiement : développement, Les différences dans les environnements de test et de production conduisent à des configurations différentes
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
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
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 :
Configuration de l'environnement de développement : developmentConfig.js
Configuration de l'environnement de test : testConfig.js
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
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
.
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
. appname
Il 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 : et d'autres répertoires pour rechercher des fichiers ./ ../ ../../ ../../../
🎜>.${appname}rc
$HOME/.${appname}rc
$HOME/.${appname}/config
$HOME/.config/${appname}
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 模块,可以满足我们的需求,我们可以配置公共的配置项,也可以隐秘的覆盖我们的配置项。
创建配置文件目录,添加配置文件
├── 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
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!