模块导出与纯JSON配置文件的区别

28

我看到在Node.js中创建配置文件的多种方法。其中一种方法是在js文件中使用module.exports,另一种方法则只使用普通的json对象。

// config1.js
module.exports = {
  config_1: "value 1",
  config_2: "value 2"
}
// config2.json
{
  "config_1": "value 1",
  "config_2": "value 2"
}

在配置文件中使用module.exports是否有优势?它们之间有什么区别?


1
唯一的真正区别是您无法在 JSON 文件中添加注释。如果您想要带有注释的 JSON 文件,可以考虑使用 rc 文件。 - Jonathan Ong
谢谢Jonathan,我注意到module.exports只在*.js文件中有效,在*.json文件中仅适用于JSON对象。我可以在*.js文件中使用module.exports来添加注释。 - Nam Nguyen
另一个重要的注意事项是,实际的 .json 文件具有更严格的语法,例如键必须用双引号括起来,在项目数组的末尾不能有逗号等。 - Jake Wilson
3个回答

34

JavaScript CommonJS模块

  • 注释
  • 条件语句
  • 循环等来填充默认值
  • 根据NODE_ENV或类似的内容更改配置的代码
  • 查找外部文件以获取SSL密钥、API凭据等的代码
  • 易于具备备用和默认值

JSON文件

  • 易于使用外部工具解析和更新
  • 与几乎所有编程语言兼容
  • 纯数据可以在不执行的情况下加载
  • 易于格式化打印
  • JSON可以作为基础,上述关于CommonJS模块的所有代码项都可以存储在一个config.js模块中,它以config.json作为起点

因此,我总是从CommonJS模块开始,这样比较方便,但其中的任何逻辑都应该简单。如果您的config.js存在错误并需要测试,则可能太复杂了。保持简单。如果我确切知道其他事物将要在我的设置中寻找漏洞,我会使用JSON文件。


14

感谢 @jonathan-ong,看起来 config.js (不是JSON文件)已经按预期工作了,我可以加一些注释。

module.exports = {

  // Development Environment

  development: {
    database: {
      host: '127.0.0.1',
      login: 'dev',
      password: 'dev'
    }
  },

  // Production Environment

  production: {
    database: {
      host: '127.0.0.1',
      login: 'prod',
      password: 'prod'
    }
  }
};

0

正如@Peter Lyons所提到的,js文件有其自己的优点。但是如果我不必访问外部资源来获取API密钥等,我更喜欢使用JSON作为配置文件。

简单的原因是我不必仅仅为了更改配置文件而触碰我的代码。我可以简单地创建一个API来编辑这些json文件,以添加、更新或删除任何配置键值对。甚至可以使用API为单独的环境添加全新的配置文件。

然后使用配置模块来消耗这些配置信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接