Node.js 向package.json添加自定义元数据或配置,是否有效?

Node.js 向package.json添加自定义元数据或配置,是否有效?,node.js,Node.js,我已经看到(不记得在哪里)一个package.json文件,其中包含以下划线开头的自定义键: { "name": "application-name" , "version": "0.0.1" , "private": true , "dependencies": { "express": "2.4.7" , "jade": ">= 0.0.1" } , "_random": true } 你可以这样做吗?它仍然有效吗?如果允许,是否有关于

我已经看到(不记得在哪里)一个package.json文件,其中包含以下划线开头的自定义键:

{
    "name": "application-name"
  , "version": "0.0.1"
  , "private": true
  , "dependencies": {
      "express": "2.4.7"
    , "jade": ">= 0.0.1"
  }
  , "_random": true
}
你可以这样做吗?它仍然有效吗?如果允许,是否有关于规则的文件


谢谢

考虑到JSON的本质和来自的这条语句,我看不出有任何错误

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

{
“姓名”:“赤骨”,
“版本”:“0.0.0”,
}
NPM还关心列出的几个字段。因此,只要它是有效的JSON,并且不干扰Node.js或NPM,一切都应该正常有效

节点对package.json文件的感知似乎扩展到了主字段

如果这是在./some库的文件夹中,那么 require(“./some library”)将尝试加载 ./some library/lib/some-library.js

这是节点对package.json文件的感知程度


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

tl;博士

  • 是的,允许您向
    package.json
    添加自定义条目
  • 选择密钥名称:
    • 尚未定义(详情如下)
    • 未保留以备将来使用(详情如下)
    • 避免使用前缀
      \uu
      $
    • 最好使用一个顶级键,在其中嵌套自定义条目
例如,如果您拥有域名
example.org
,您可以将自定义
随机
键存储在反向域名符号中的顶级键中,用
替换
,如果适用,
-
(参见注释)(例如
org\u example
):

{
“名称”:“应用程序名称”
,“版本”:“0.0.1”
,“私人”:正确
“依赖项”:{
“快车”:“2.4.7”
,“翡翠”:“>=0.0.1”
}  
,“组织示例”:{
“随机”:正确
}
}
要读取此类自定义属性,请使用以下技术:

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

npm
package.json
文件格式主要符合以下要求:

  • 当前使用的
    npm
    键:
  • 规范中定义的键
至于选择自定义键:状态(强调我的):

以下字段是未来的扩展而保留的
构建
默认
电子邮件
外部
文件
导入
维护者
路径
平台
要求
摘要
测试
使用
下载
uid

包描述符规范的扩展应通过将其属性与无害的名称隔开,以避免将来的标准名称发生冲突,而无害的名称与通用包管理无关

以下字段是为包注册中心保留的,由其自行决定使用:
id
type
。 所有以
\uuu
$
开头的属性也保留给包注册中心使用


它关心更多的领域:p得益于2年多的后见之明:npm关心更多的领域(节点本身也关心其中的一个子集)-请参阅。不要对自定义属性使用
\
(或
$
):“所有以u或$开头的属性也保留给包注册中心,由其自行决定使用。”-请参阅以了解更多信息。我真的建议您阅读。感谢您的深入了解。您有什么理由建议使用
“org\u example”
而不是
“org.example”
——或类似
的XML名称空间http://example.org“
?@tomekwi:您可以使用
org.example
http://example.org
,但是,考虑到JSON键名称也是JavaScript对象属性名称,以后访问这些属性会很尴尬,因为您必须使用类似于
pkg['org.example']
的东西,因为更自然的
pkg.
语法不适用于它们。@tomekwi:至于
@example
:我想如果您使用您/您的组织的npm用户名,这会起作用。请注意,我们在这里讨论的是一种自选的约定,所以我个人会选择反向域表示法,因为它是(a)在其他上下文中的常见做法,(b)比npm用户名“更独特”。@tomekwi:是的,使用
\uu
的关键在于,例如。,
org\u示例
被识别为单个单词,形成一个常规的JS属性名。您指的是
-
(连字符)字符。在域名中,这确实是行不通的。但是,您也可以将
-
实例替换为
-
实例;虽然这使得转换可能是不可逆的,但我仍然觉得它比
http://domain-name.org
,特别是考虑到在域名中使用
-
的情况越来越少。然而,这最终是一个偏好的问题。我认为NPM团队应该为此选择一个保留的属性。比如“配置”,我不知道
require("./package.json").org_example.random // -> true