Voeg aangepaste metadata of configuratie toe aan package.json, is dit geldig?

Ik heb een package.json-bestand gezien (weet niet meer waar) met aangepaste sleutels die beginnen met een onderstrepingsteken:

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

Mag je dit doen? Is het nog steeds geldig? Als dit is toegestaan, is er dan documentatie over de regels?

Bedankt!


Antwoord 1, autoriteit 100%

tl;dr:

  • Ja, u magaangepaste vermeldingen toevoegen aan package.json.
  • Kies een sleutelnaam:
    • niet reeds gedefinieerd(details hieronder)
    • niet gereserveerdvoor toekomstig gebruik (details hieronder)
    • vermijdvoorvoegsels _en $
    • en bij voorkeur gebruik een enkelesleutel op het hoogste niveauwaarin u uw aangepaste items nest.

Als u bijvoorbeeld eigenaar bent van domein example.org, kunt u een aangepaste random-sleutel als volgt opslaan, in een sleutel op het hoogste niveau in het omgekeerde domein -naamnotatie met _vervangen door .en, indien van toepassing, -(zie opmerkingen)(bijv. org_example):

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

Gebruik de volgende techniek om dergelijke aangepaste eigenschappen te lezen:

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

npm‘s package.jsonbestandsformaat komt grotendeels overeen met de CommonJS-pakketspecificatie:

Wat betreft het kiezen van aangepaste sleutels: de CommonJS-pakketspecificatiestaten (nadruk van mij):

De volgende velden zijn gereserveerdvoor toekomstigeuitbreidingen: build, default, email, external, files, imports, maintainer, paths, platform, require, summary, test, using, downloads, uid.

Uitbreidingen van de pakketdescriptorspecificatie moeten streven naar het vermijden van botsingen voor toekomstige standaardnamen door hun eigenschappen op naam te plaatsen met onschuldige namen die geen betekenis hebben die relevant is voor algemeen pakketbeheer.

De volgende velden zijn gereserveerd voor pakketregistersom naar eigen goeddunken te gebruiken: id, type.
Alle eigenschappen die beginnen met _of $zijn ook gereserveerdvoor pakketregisters om naar eigen goeddunken te gebruiken.


Antwoord 2, autoriteit 15%

Gezien de aard van JSON en deze verklaring uit de Nodejitsu-documentatieIk zie daar niets mis mee.

NPM zelf kent slechts tweevelden in de package.json:

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

NPM geeft ook om een ​​aantal velden die hierworden vermeld. Dus zolang het een geldige JSON is en Node.js of NPM niet verstoort, zou alles in orde en geldig moeten zijn.

Node’s bekendheid met package.json-bestanden lijkt zich uit te breiden tot het hoofd-veld. Ref.

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

Als dit in een map op ./some-library stond, dan
vereisen(‘./some-library’) zou proberen te laden
./some-library/lib/some-library.js.

Dit is de mate waarin Node zich bewust is van package.json-bestanden.

Om mogelijke conflicten te voorkomen, moet u uw sleutels vooraf laten gaan door een teken of woord. Het wordt niet aanbevolen om een ​​onderstrepingsteken (_) of dollarteken ($) te gebruiken, aangezien dit gereserveerde tekenvoorvoegsels zijn, maar andere keuzes zijn mogelijk.

Other episodes