La especificación de JavaScript (ECMAScript) no define un conjunto completo de bibliotecas estándar que se pueden aplicar a la mayoría de los programas. CommonJS proporciona un conjunto de especificaciones de biblioteca estándar de JavaScript. El nodo implementa la especificación CommonJS.
Conceptos básicos de módulos
En el nodo, los módulos y los archivos corresponden uno por uno. Definimos un módulo:
La copia del código es la siguiente:
// circle.js
var pi = math.pi;
// Área de función de exportación
exports.area = function (r) {
devolver pi * r * r;
}
// Exportar Circuito de funciones
exports.circumferferfers = function (r) {
devolver 2 * pi * r;
};
Aquí las funciones que deben exportarse se agregan al objeto de exportaciones. Las variables locales del módulo no son accesibles externamente (por ejemplo, la variable PI en el ejemplo anterior). Llame requiere cargar el módulo círculo.js:
La copia del código es la siguiente:
var circle = request ('./ circle.js');
console.log ('El área de un círculo de radio 4 es'
+ circle.area (4));
Como se mencionó, en el módulo, hay un objeto del módulo que representa el módulo en sí, y las exportaciones es el atributo del módulo.
Carga de módulos
El nodo se amortiguará módulos cargados para evitar la sobrecarga de la recarga:
La copia del código es la siguiente:
// test.js
console.log ("Estoy aquí");
Test de módulo de carga. JS varias veces
La copia del código es la siguiente:
// Solo salida "Estoy aquí" una vez
requiere ('./ prueba');
requiere ('./ prueba');
Cuando el archivo de carga no tiene sufijo, el nodo intenta agregar el sufijo y cargar:
1..js (archivo fuente de JavaScript)
2..node (módulo de extensión C/C ++)
3..JSON (archivo JSON)
Hay varios tipos principales de módulos:
1. Módulo de núcleo. Los módulos centrales se han compilado en el nodo, y podemos encontrar estos módulos centrales en el directorio LIB en su código fuente. Módulos de núcleo común: net, http, módulo FS, etc.
2. Módulo de archivo. El módulo de archivo se carga a través de una ruta relativa o absoluta, como el circle.js que vimos arriba
3. Personaliza el módulo. El módulo personalizado se encuentra en el directorio Node_Modules. Los diversos módulos que instalamos a través de NPM se colocan en el directorio Node_Modules.
Los módulos centrales siempre se cargan primero. Si hay un módulo personalizado HTTP, entonces el módulo Core HTTP aún se cargará en lugar del módulo personalizado HTTP al cargar. Al cargar un módulo personalizado, primero busque el directorio Node_Modules en el directorio actual, luego busque el directorio node_modules en el directorio principal, y así sucesivamente hasta el directorio raíz.
Requerir cuándo el módulo cargado no es un archivo, pero un directorio, dicho directorio se llama paquete. Hay un archivo llamado paquete.json (archivo de descripción del paquete) en el paquete, por ejemplo:
La copia del código es la siguiente:
{"Nombre": "Some-Bibrary",
"Main": "./lib/some-library.js"}
Donde Main indica el módulo que debe cargarse. Si el paquete.json no existe en el paquete o paquete.json no especifica el módulo principal, entonces el nodo intentará cargar index.js, index.node, index.json.
Al cargar un módulo JavaScript, el módulo cargado está envuelto en una función:
La copia del código es la siguiente:
función (módulo, exportaciones, __filename, __dirname, ...) {
Módulo JavaScript
}
El módulo, las exportaciones, __filename, __Dirname, etc. accedido por cada módulo JavaScript en realidad se transmiten a través de parámetros de función. Debido a este tipo de paquete, las variables locales del módulo son inaccesibles externamente. Pero a veces hay problemas que son difíciles de entender, como:
test1.js
La copia del código es la siguiente:
exportaciones = {
Nombre: 'Name5566',
}
test2.js
La copia del código es la siguiente:
módulo.exports = {
Nombre: 'Name5566',
}
Cargue estos dos módulos:
La copia del código es la siguiente:
var test1 = request ('./ test1.js');
console.log (test1.name); // indefinido
var test2 = request ('./ test2.js');
console.log (test2.name); // name5566
Las exportaciones se pasan como parámetros al módulo. Podemos agregar naturalmente atributos (o métodos) al objeto Exports a través de exports.x, pero asignando directamente un valor a las exportaciones (por ejemplo, exportaciones = x) solo cambia el valor del parámetro formal en lugar del parámetro real, entonces:
1. Al agregar propiedades a las exportaciones, use exportaciones
2. Al asignar un valor a las exportaciones, use módulo.exports
Bolsa
Según la especificación CommonJS, un paquete completo debe incluir:
1.package.json Paquete Descripción Archivo
2. Directorio de archivos binarios de Bin
3.LIB JavaScript Directorio de código
4. Directorio de documentos de DOC
5. Directorio de código de prueba de prueba
NPM es una herramienta de administración de paquetes para el nodo. Uso común:
Ver la documentación del comando:
La copia del código es la siguiente:
Ayuda de NPM Instalar
Vea la documentación para la instalación del comando.
Instale un paquete:
La copia del código es la siguiente:
NPM Install Redis
Instale el paquete Redis. El comando Instalar instala el paquete en el directorio node_modules en el directorio actual.
Eliminar un paquete:
La copia del código es la siguiente:
npm eliminar redis
Retire el paquete Redis. El comando RETImir eliminará el paquete en el directorio actual.