用于配置文件的 Module.exports 与普通 json

Posted

技术标签:

【中文标题】用于配置文件的 Module.exports 与普通 json【英文标题】:Module.exports vs plain json for config files 【发布时间】:2013-08-30 20:51:49 【问题描述】:

我看到了多种在 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 有什么好处吗?有什么区别?

【问题讨论】:

唯一真正的区别是您不能在 json 文件中添加 cmets。如果你想要一个带有 cmets 的 json 文件,你可能对使用 rc 文件感兴趣。 感谢 Jonathan,我注意到 module.exports 仅在 *.js 文件中有效,而 json 对象仅在 *.json 文件中有效。我可以在 *.js 文件中使用 module.exports 发表评论。 另一个重要的注意事项是实际的 .json 文件具有更严格的语法,例如键必须用双引号括起来,您不能在项目数组的末尾有逗号,等 【参考方案1】:

感谢@jonathan-ong,看起来 config.js(NOT JSON 文件)按预期工作,我可以放一些 cmets。

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

【讨论】:

【参考方案2】:

javascript CommonJS 模块

cmets 条件 循环等填充默认值 根据 NODE_ENV 或类似代码更改配置的代码 用于查找 SSL 密钥、API 凭据等外部文件的代码 更容易拥有回退和默认值

JSON 文件

易于使用外部工具解析和更新 与市面上几乎所有的编程语言兼容 无需执行即可加载的纯数据 易于打印 JSON 可以作为基础开始,上面描述的关于 CommonJS 模块的所有代码项都可以存在于一个 config.js 模块中,该模块读取 config.json 作为它的起点

所以为了方便起见,我总是从 commonjs 模块开始,但要保持其中的任何逻辑简单。如果您的 config.js 有错误并需要测试,那可能太复杂了。吻。如果我知道其他东西会在我的配置中出现,我将使用 JSON 文件。

【讨论】:

【参考方案3】:

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

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

并使用配置模块来消费这些配置

【讨论】:

以上是关于用于配置文件的 Module.exports 与普通 json的主要内容,如果未能解决你的问题,请参考以下文章

exports与module.exports的区别

module.exports和exports

Nodejs/Express/Typescript 需要 module.exports

module.exports与exports区别

Commonjs规范中module.exports和exports的区别

Node.js模块系统