86

我见过(不记得在哪里)一个带有以下划线开头的自定义键的 package.json 文件:

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.4.7"
    , "jade": ">= 0.0.1"
  }
  , "_random": true
}

你可以这样做吗?它仍然有效吗?如果允许,是否有任何有关规则的文件?

谢谢!

4

2 回答 2

122

tl;博士

  • 是的,您可以将自定义条目添加到package.json.
  • 选择一个键名:
    • 尚未定义(详情如下)
    • 不保留供将来使用(详情如下)
    • 避免前缀_$
    • 并且最好使用单个顶级键嵌套您的自定义条目

例如,如果您拥有 domain example.org,您可以将自定义random键存储在反向域名表示法的顶级键中,并_替换为.and,如果适用,-(请参阅注释)(例如,org_example):

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.4.7"
    , "jade": ">= 0.0.1"
  }  
  , "org_example": {
      "random": true
  }
}

要读取此类自定义属性,请使用以下技术:

require("./package.json").org_example.random // -> true

npmpackage.json文件格式大多符合CommonJS 包规范

至于选择自定义键CommonJS 包规范声明(强调我的):

以下字段为将来扩展保留: , , , , , , , , , , , , , , .builddefaultemailexternalfilesimportsmaintainerpathsplatformrequiresummarytestusingdownloadsuid

对包描述符规范的扩展应努力避免未来标准名称的冲突,方法是使用与通用包管理无关的无害名称来命名它们的属性

以下字段保留供软件包注册表自行决定使用:id, type. 所有以开头的属性也保留_$给包注册表以供他们自行决定使用。

于 2014-12-01T16:11:19.997 回答
19

鉴于 JSON 的性质和Nodejitsu 文档中的这一声明,我认为这没有任何问题。

NPM 本身只知道 package.json 中的两个字段:

{
   "name" : "barebones",
   "version" : "0.0.0",
}

NPM 还关心这里列出的几个字段。所以只要它是有效的 JSON 并且不干扰 Node.js 或 NPM 一切都应该是好的和有效的。

Node 对 package.json 文件的认识似乎延伸到了主要领域。参考。

 { "name" : "some-library",
   "main" : "./lib/some-library.js" }

如果它位于 ./some-library 的文件夹中,则 require('./some-library') 将尝试加载 ./some-library/lib/some-library.js。

这就是 Node 对 package.json 文件的认知程度。

为避免可能的冲突,您应该在键前加上一些字符或单词。不建议使用下划线 (_) 或美元符号 ($),因为它们是保留字符前缀,但其他选择也是可行的。

于 2012-04-08T19:29:13.887 回答