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

  • はい、にカスタムエントリを追加できます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
  }
}

このようなカスタムプロパティを読み取るには、次の手法を使用します。

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

npmのファイル形式は、ほとんどがCommonJSパッケージ仕様package.jsonに準拠しています。

カスタムキーの選択に関して:CommonJSパッケージ仕様は次のように述べています(私の強調):

次のフィールドは、将来の拡張用に予約されています:、、、、、、、、、、、、、、、、、、。_builddefaultemailexternalfilesimportsmaintainerpathsplatformrequiresummarytestusingdownloadsuid

パッケージ記述子仕様の拡張は、一般的なパッケージ管理に関連する意味を持たない無害な名前でプロパティを名前間隔で指定することにより、将来の標準名の衝突を回避するように努める必要があります。

次のフィールドは、パッケージレジストリが独自の裁量で使用するために予約されています:idtypeまたはで始まる_$すべてのプロパティは、パッケージレジストリが独自に使用するために予約されています。

于 2014-12-01T16:11:19.997 に答える
19

JSONの性質とNodejitsuのドキュメントからのこのステートメントを考えると、私はそれについて何も悪いことは見ていません。

NPM自体は、package.jsonの2つのフィールドのみを認識します。

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

NPMは、ここにリストされているいくつかのフィールドにも関心を持っています。有効なJSONであり、Node.jsやNPMに干渉しない限り、すべてが正常で有効である必要があります。

package.jsonファイルに対するノードの認識はメインフィールドにまで及ぶようです。参照。

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

これが./some-libraryのフォルダーにある場合、require('./ some-library')は./some-library/lib/some-library.jsを読み込もうとします。

これは、ノードがpackage.jsonファイルを認識する範囲です。

競合の可能性を回避するには、キーの前に文字または単語を付ける必要があります。アンダースコア(_)またはドル記号($)は予約済みの文字プレフィックスであるため、使用することはお勧めしませんが、他の選択肢も実行可能です。

于 2012-04-08T19:29:13.887 に答える