将自定义元数据或配置添加到package.json,它有效吗?

Lan*_*ard 64 node.js

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

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.4.7"
    , "jade": ">= 0.0.1"
  }
  , "_random": true
}
Run Code Online (Sandbox Code Playgroud)

你被允许这样做吗?它仍然有效吗?如果允许,是否有关于规则的文档?

谢谢!

mkl*_*nt0 89

tl;博士:

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

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

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.4.7"
    , "jade": ">= 0.0.1"
  }  
  , "org_example": {
      "random": true
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

以下字段保留用于将来扩展:build,default,email,external,files,imports,maintainer,paths,platform,require,summary,test,using,downloads,uid.

包描述符规范的扩展应该努力通过使用与一般包管理无关的无关名称来隔离其属性来避免未来标准名称的冲突.

以下字段保留供软件包注册管理机构自行决定使用:id,type.所有属性均以_$包裹注册表开头保留,以供其自行决定使用.

  • @tomekwi:你_could_使用`org.example`或`http:// example.org`,但是,鉴于JSON键名也是JavaScript对象属性名,以后访问这些属性会很困难,因为你'必须使用类似`pkg ['org.example']`的东西,因为更自然的`pkg.<propertyname>`语法不能用于它们. (6认同)
  • 我认为 NPM 团队应该为此选择一个保留属性。就像“配置”一样,我不知道 (4认同)
  • 感谢您的见解.你有没有理由推荐`"org_example"`而不是`"org.example"` - 或者像XML命名空间一样``http://example.org"`? (2认同)
  • @tomekwi:至于`@ example`:我想如果你使用你/你组织的npm用户名那就行.请注意,我们在这里讨论的是自选公约,所以我个人会选择反域符号,因为它是(a)在其他情况下的常见做法),以及(b)"更多独特的"比npm用户名. (2认同)

Oct*_*ean 19

鉴于JSON的性质和Nodejitsu文档中的这个声明,我没有看到任何错误.

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

{
   "name" : "barebones",
   "version" : "0.0.0",
}
Run Code Online (Sandbox Code Playgroud)

NPM还关注这里列出的几个领域.因此,只要它是有效的JSON并且不干扰Node.js或NPM,一切都应该是正常和有效的.

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

 { "name" : "some-library",
   "main" : "./lib/some-library.js" }
Run Code Online (Sandbox Code Playgroud)

如果这是在./some-library的文件夹中,则require('./ some-library')会尝试加载./some-library/lib/some-library.js.

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

为了避免可能的冲突,您应该在键上添加一些字符或单词.下划线是常见的变体.

  • 凭借2年多的后见之明:npm关注更多领域(以及关于其中一部分的节点本身) - 请参阅https://www.npmjs.org/doc/files/package.json.html.不要将`_`(或`$`)用于自定义属性:"所有以_或$开头的属性也保留给包注册表以供其自行决定使用." - http://wiki.commonjs.org/wiki/Packages/1.1有关更多信息,请参阅[我的回答](http://stackoverflow.com/a/27232456/45375). (9认同)
  • 它关心更多领域:P (4认同)
  • 我真的建议你阅读[@ mklement0]的最新答案(http://stackoverflow.com/a/27232456/2816199). (4认同)