当前位置: 首页 > Web前端 > HTML

使用node-config在Node.js中创建配置文件

时间:2023-03-28 11:57:56 HTML

跨不同环境管理多个配置文件可能具有挑战性,并且有多种工具试图以不同的方式解决这个问题。然而,在本文中,我们将学习如何使用node-config跨不同的部署环境创建和管理Node.js配置文件。什么是节点配置?Node-config允许您在Node应用程序中为不同的部署环境创建配置文件。有了它,你可以定义一个你打算跨环境复用的默认配置文件,然后将默认配置扩展到其他环境,如开发、登台等。你可以使用一些临时的命令行参数来覆盖这些参数,比如将NODE_ENV=development添加到命令行参数。Node-config可以更轻松地创建和管理在所有部署环境中共享的一致配置界面。为了更好地理解如何进行设置,让我们使用一个示例Node应用程序。首先,通过在终端中运行以下命令来克隆存储库,或者从此处下载并解压缩它。gitclonehttps://github.com/ezesundayeze/node-env-sample要安装Node依赖项,请运行:npminstallsetupnode-config由于node-config是一个npm包,我们可以通过运行以下任一命令来安装它使用npm或yarn安装它。npminstallconfig或yarnaddconfig支持的node-config文件扩展名Node-config支持许多文件扩展名。在发布时,当前版本的node-config(3.3.6)支持以下扩展:-.json-.json5-.hjson-.yaml或.yml-.coffee-.js-.cson-.properties-.toml-.ts-.xml这意味着您可以使用任何一种受支持的扩展来创建您的配置文件,但是为您的项目选择一个扩展并在整个构建过程中坚持使用它是有意义的。在本教程中,我们将使用.json扩展名。创建默认环境变量创建一个config目录并向其中添加一个config/default.json文件。这将是默认配置文件,并将包含所有默认环境变量。在我们的示例应用程序中,它应该如下所示:config/default.json{"server":{"host":"localhost","port":0,}}我们将通过导入配置将其导入我们的应用程序并使用get方法访问变量来访问它。constconfig=require('配置');constport=config.get('server.port');consthost=config.get('server.host');让我们创建一个server.js文件并添加以下代码。constexpress=require('express');constconfig=require('config');constapp=express();constport=config.get('server.port');consthost=config.get('服务器.host');app.get('/',(req,res)=>{res.send('HelloWorld');});constserver=app.listen(port,host,(err)=>{if(err){console.log(err);process.exit(1);}console.log(`服务器正在${host}上运行:${server.address().port}`);});您可以在应用程序的其他部分以类似的方式使用节点配置。扩展默认配置文件您可以通过创建额外的配置文件来扩展默认配置文件。例如,您可以为开发、生产、QA、暂存、本地等创建配置文件。让我们来看看我们将在我们的应用程序中使用的主要配置文件类型。本地配置文件创建本地配置文件是为了覆盖配置文件的部署版本。例如,对于您的开发部署,您可以有一个local-development.json文件来存储您所有的本地开发配置——它反映了您在部署的开发环境中期望的行为类型。所以,你可以有这样的东西:local-{instance}.EXTlocal-{deployment}.EXTlocal-{deployment}-{instance}.EXTshorthostnameandfullhostname你也可以用短主机名和完整主机名定义你的配置文件一个特定的平台,以防你想在多个实例上部署。例如,您可以有一个{short_hostname}来代表您的服务器名称,直到第一个点。如果您的主机名是demo.example.com,则配置可以是demo.EXT(demo.json)。此外,如果您的{full_hostname}是您的完整服务器名称,如果它与其他机器冲突,您可以使用{short_hostname}。因此,如果您的主机名是demo.example.com,您的配置文件名将是demo.example.com.json。自定义配置文件您可能还想创建自定义配置文件以适应某些环境变量覆盖。Node-config提供对配置文件类型的支持,您可以使用名称custom-environment-variables.EXT(custom-environment-variables.json)来定义它们。测试配置值如果你的环境变量没有设置,使用它们的服务将会中断。所以,你应该确保你的环境变量已经过测试。Node-config提供了几个实用程序,其中之一是config.has()方法,它允许您验证是否设置了环境变量。您可以创建一个测试文件或将其添加到您的预提交挂钩,以确保您的配置文件已全部设置。这是一个如何使用config.has()检查配置变量是否存在的示例:if(config.has('dbConfig')){...}您也可以在Jest测试中使用它,如下所示:constconfig=require('config');test('服务器配置存在',()=>{expect(config.has("server")).toBe(true);});test('默认配置存在',()=>{expect(config.has("server.port")).toBe(true);expect(config.has("server.host")).toBe(true);});使用命令行重写使用命令行覆盖允许您从终端或命令行即时指定配置参数。您需要在启动应用程序时通过指定NODE_CONFIG='{...}'命令来设置配置。该参数必须是JSON字符串的格式。这是一个示例:NODE_CONFIG='{"server":{"host":"192.168.43.13","port":"3030"}}'npmrundevJSON值周围的单引号允许您安全地使用双引号。在某些情况下,根据您的操作系统,您可能需要转义某些字符。您还可以使用命令行导出来避免一直键入命令。在您的终端上运行以下命令将覆盖您的服务器的主机和端口或您选择覆盖的任何其他配置。exportNODE_CONFIG='{"server":{"host":"192.168.43.13","port":"3030"}}'如果你更喜欢使用JavaScript,你可以在调用配置库文件之前将它添加到你的服务器,如下:constexpress=require('express');process.env.NODE_CONFIG='{"server":{"host":"localhost","port":"3030"}}';constconfig=require('配置');诀窍是在加载配置之前将NODE_CONFIG变量设置为JSON字符串。发生这种情况是因为命令行覆盖优先于所有其他类型的覆盖。下面是一些在使用node-config时不能用作环境变量的保留字,因为库提供了它们的实现,可能会与您的冲突。gethasutilgetConfigSourcesmakeHiddenmakeImmutablesetModuleDefaultswatch_attachProtoDeep_cloneDeep_diffDeep这不是一个详尽的列表,所以一定要检查文档。有一些插件可以让你有效地使用node-config和Docker来管理密钥,一个插件可以让你自动重新加载node-config(你可能已经知道,配置不会在文件更改时自动加载),并允许你使用插件来取消缓存您的配置变量。总结当使用node-config时,有无数种方法来配置你的Node应用程序。有了它,您可以轻松管理您的配置文件并根据需要扩展它们,从而在您的项目中实现最大的灵活性、可靠性和一致性。谢谢阅读。