Dans la langue Node.js, il n'y a pas de différence essentielle entre les packages et les modules. Les packages sont une abstraction plus profonde basée sur des modules. Les packages résument une certaine fonction indépendante pour la version, la mise à jour, la gestion des dépendances et le contrôle de version. Node.js implémente le mécanisme de package en fonction de la spécification CommonJS et développe le NPM pour résoudre les besoins de libération et d'acquisition du package.
Le package Node.js est un répertoire contenant le package Description File package.json au format JSON. Le package Node.js suit essentiellement la spécification CommonJS, il a donc les caractéristiques suivantes:
Caractéristiques du package défini par la spécification CommonJS:
1) Le répertoire de niveau supérieur contient le fichier package.json;
2) Le répertoire de bac stocke les fichiers binaires;
3) Le répertoire LIB stocke les fichiers JavaScript;
4) Le DOC Directory stocke les documents;
5) Le répertoire des tests stocke les tests unitaires.
Le module et le fichier node.js correspondent un par un. Le fichier peut non seulement être un fichier source JavaScript ou un fichier binaire, mais aussi un répertoire. Le package le plus simple est un module de répertoire.
Le package Node.js est généralement une collection de certains modules, qui fournit des abstractions de niveau supérieur basées sur des modules, ce qui équivaut à fournir des bibliothèques de fonctions d'interface fixe.
En personnalisant Package.json, nous pouvons créer des packages plus complexes, plus complets et plus standardisés pour la publication.
Lorsque Node.js appelle un package, il vérifie d'abord le champ principal du fichier package.json dans le package et l'utilise comme module d'interface du package. Si le champ principal du fichier package.json n'existe pas, Node.js essaiera de trouver index.js ou index.node comme interface du package.
Le fichier package.json est un fichier utilisé par la spécification CommonJS pour décrire le package. Le fichier package.json conforme pleinement à la spécification doit contenir les champs suivants:
1) Nom: Nom du package. Le nom du package est unique et se compose de lettres, de chiffres et de soulignements minuscules, et ne peut pas contenir d'espaces.
2) Description: Description du package. Une brève description du package.
3) Version: numéro de version. Chaîne de version qui répond à la spécification de reconnaissance de la version sémantique.
4) Mots-clés: tableau des mots clés, généralement utilisé pour la recherche.
5) RETERNIEURS: Arrayers Array. Chaque élément contient des champs de nom, e-mail (facultatif) et web (facultatif).
6) Contributeurs: Tableau de contributeurs. Le format est le même que le tableau d'entretien. L'auteur de package doit être le premier élément du tableau des contributeurs.
7) Bogues: L'adresse pour soumettre le bogue peut être une URL ou une adresse e-mail.
8) Licences: Tableau de licence. Chaque élément doit contenir le type (nom de licence) et URL (adresse liée au texte de licence).
9) Référentiels: un tableau d'adresses d'hébergement de référentiel. Chaque élément doit contenir le type (type du référentiel, tel que GIT), URL (adresse de référentiel) et chemin (facultatif par rapport au chemin de référentiel).
10) Dépendances: dépendances de package. est un tableau associatif composé du nom et du numéro de version du package.
Remarque: La spécification "Reconnaissance de la version sémantique" est un ensemble de spécifications de dénomination de version proposées par les pays étrangers. L'objectif d'origine était de résoudre divers problèmes de comparaison de la taille du numéro de version et est actuellement adopté par de nombreux systèmes de gestion des packages.
Voici un exemple de package.json qui se conforme pleinement à la spécification CommonJS:
La copie de code est la suivante:
{
"nom": "testpackage",
"Description": "Mon package pour CommonJS.",
"Version": "0.1.0",
"Mots-clés": [
"TestPackage",
"liq"
],
"mainteneurs": [
{
"nom": "liq",
"Courriel": "[email protected]",
}
],
"Contributeurs": [
{
"nom": "liq",
"Web": "http://blog.csdn.net/chszs"
}
],
"insectes": {
"Mail": "[email protected]",
"Web": "http://blog.csdn.net/chszs"
},
"Licences": [
{
"Type": "Licence Apache V2",
"URL": "http://www.apache.org/licenses/apache2.html"
}
],
"Référentiels": [
{
"type": "git",
"URL": "http://github.com/chszs/packagetest.git"
}
],
"dépendances": {
"webkit": "1.2",
"ssl": {
"gnutls": ["1.0", "2.0"],
"OpenSSL": "0.9.8"
}
}
}