Ajouter des métadonnées personnalisées ou config à package.json, est-ce valide?

J’ai vu (ne me souviens pas où) un fichier package.json avec des clés personnalisées commençant par un trait de soulignement:

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

Êtes-vous autorisé à le faire? Est-ce toujours valable? Si cela est permis, existe-t-il une documentation sur les règles?

Merci!

tl; dr :

  • Oui, vous êtes autorisé à append des entrées personnalisées à package.json .
  • Choisissez un nom de clé:
    • pas déjà défini (détails ci-dessous)
    • non réservé pour une utilisation future (détails ci-dessous)
    • éviter les préfixes _ et $
    • et utilisez de préférence une seule clé de niveau supérieur dans laquelle imbriquer vos entrées personnalisées .

Par exemple, si vous possédez le domaine example.org , vous pouvez stocker une clé random personnalisée comme suit, dans une clé de niveau supérieur en notation de nom de domaine inversé avec _ substitué . et, le cas échéant, - (voir les commentaires) (par exemple, org_example ):

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

Le format de fichier package.json npm est principalement conforme à la spécification du package CommonJS :

En ce qui concerne le choix des clés personnalisées : la spécification du package CommonJS indique (souligne le mien):

Les champs suivants sont réservés à une future extension: build , default , email , external , files , imports , maintainer , paths , platform , require , summary , test , using , downloads , uid .

Les extensions de la spécification du descripteur de package doivent s’efforcer d’éviter les collisions pour les futurs noms standard en espaçant leur nom avec un nom inoffensif qui n’a pas de signification pour la gestion générale des packages .

Les champs suivants sont réservés aux registres de paquets à utiliser à leur discrétion: id , type . Toutes les propriétés commençant par _ ou $ sont également réservées aux registres de paquets à utiliser à leur discrétion.

Étant donné la nature de JSON et cette déclaration de la documentation de Nodejitsu, je ne vois rien de mal à cela.

NPM lui-même n’a connaissance que de deux champs dans le package.json:

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

NPM se préoccupe également de quelques champs listés ici . Donc, tant qu’il s’agit de JSON valide et qu’il n’interfère pas avec Node.js ou NPM, tout devrait être correct et valide.

La connaissance des fichiers package.json par Node semble s’étendre au champ principal . Réf.

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

Si cela se trouvait dans un dossier à ./some-library, alors require (‘./ some-library’) tenterait de charger ./some-library/lib/some-library.js.

C’est la mesure de la connaissance par Node des fichiers package.json.

Pour éviter les conflits possibles, préfixez vos clés avec un caractère ou un mot. Un trait de soulignement est une variante courante.