En el lenguaje Node.js, no hay una diferencia esencial entre los paquetes y los módulos. Los paquetes son una abstracción más profunda basada en módulos. Los paquetes encapsulan una cierta función independiente para la versión, actualización, administración de dependencias y control de versiones. Node.js implementa el mecanismo del paquete de acuerdo con la especificación CommonJS y desarrolla NPM para resolver las necesidades de liberación y adquisición del paquete.
El paquete Node.js es un directorio que contiene el archivo de descripción del paquete paquete.json en formato JSON. El paquete Node.js básicamente sigue la especificación CommonJS, por lo que tiene las siguientes características:
Características del paquete definidas por la especificación CommonJS:
1) El directorio de nivel superior contiene el archivo paquete.json;
2) El directorio bin almacena archivos binarios;
3) El directorio LIB almacena archivos JavaScript;
4) El directorio DOC almacena documentos;
5) El directorio de prueba almacena pruebas unitarias.
El módulo Node.js y el archivo corresponden uno por uno. El archivo no solo puede ser un archivo fuente de JavaScript o un archivo binario, sino también un directorio. El paquete más simple es un módulo de directorio.
El paquete Node.js suele ser una colección de algunos módulos, que proporciona abstracciones de nivel superior basadas en módulos, que es equivalente a proporcionar algunas bibliotecas de funciones de interfaz fija.
Al personalizar el paquete.json, podemos crear paquetes más complejos, más completos y más estandarizados para la publicación.
Cuando Node.js llama a un paquete, primero verifica el campo principal del archivo paquete.json en el paquete y lo usa como el módulo de interfaz del paquete. Si no existe el campo principal del archivo paquete.json, Node.js intentará encontrar index.js o index.node como interfaz de paquete.
El archivo Package.json es un archivo utilizado por la especificación CommonJS para describir el paquete. El archivo paquete.json que cumple completamente con la especificación debe contener los siguientes campos:
1) Nombre: nombre del paquete. El nombre del paquete es único y consta de letras, números y subrayos minúsculas, y no puede contener espacios.
2) Descripción: Descripción del paquete. Una breve descripción del paquete.
3) Versión: número de versión. Cadena de versión que cumple con la especificación de reconocimiento de versión semántica.
4) Palabras clave: matriz de palabras clave, generalmente utilizada para la búsqueda.
5) Mantenedores: matriz de mantenedores. Cada elemento contiene nombre de nombre, correo electrónico (opcional) y web (opcional).
6) Colaboradores: variedad de contribuyentes. El formato es el mismo que la matriz de mantenimiento. El autor del paquete debe ser el primer elemento de la matriz de contribuyentes.
7) Erreros: la dirección para enviar el error puede ser una URL o dirección de correo electrónico.
8) Licencias: matriz de licencias. Cada elemento debe contener el tipo (nombre de la licencia) y la URL (dirección vinculada al texto de la licencia).
9) Repositorios: una matriz de direcciones de alojamiento de repositorio. Cada elemento debe contener el tipo (tipo de repositorio, como GIT), URL (dirección de repositorio) y ruta (opcional relativa a la ruta del repositorio).
10) Dependencias: dependencias de paquetes. es una matriz asociativa que consiste en el nombre del paquete y el número de versión.
Nota: La especificación de "reconocimiento de versión semántica" es un conjunto de especificaciones de nombres de versiones propuestas por países extranjeros. El propósito original era resolver varios problemas de comparación de tamaño de número de versión, y actualmente es adoptado por muchos sistemas de gestión de paquetes.
Aquí hay un paquete de ejemplo.json que cumple completamente con la especificación CommonJS:
La copia del código es la siguiente:
{
"Nombre": "TestPackage",
"Descripción": "Mi paquete para CommonJS".
"Versión": "0.1.0",
"Palabras clave": [
"TestPackage",
"Liq"
]
"Mantenedores": [
{
"Nombre": "Liq",
"Correo electrónico": "[email protected]",
}
]
"Colaboradores": [
{
"Nombre": "Liq",
"Web": "http://blog.csdn.net/chszs"
}
]
"insectos": {
"Correo": "[email protected]",
"Web": "http://blog.csdn.net/chszs"
},
"Licencias": [
{
"Tipo": "Apache License V2",
"URL": "http://www.apache.org/licenses/apache2.html"
}
]
"Repositorios": [
{
"Tipo": "Git",
"URL": "http://github.com/chszs/packagetest.git"
}
]
"Dependencias": {
"WebKit": "1.2",
"SSL": {
"Gnutls": ["1.0", "2.0"],
"OpenSsl": "0.9.8"
}
}
}