Descripción del problema
Este blog resolverá los siguientes problemas:
- La conexión y diferencia entre module.exports y export
- Importar y exportar reglas de módulos en Node
- Análisis de principios, comprensión profunda de la esencia.
1. Introducción a los módulos en Node
Node proporciona muchas API de nivel de servidor para JavaScript, y la mayoría de estas API están empaquetadas en un módulo central con nombre.
- Por ejemplo, el módulo principal fs para operaciones de archivos, el módulo http construido por servicios http, el módulo de operación de ruta y el módulo de información del sistema operativo os
- No hay alcance global en el nodo, solo alcance del módulo
El método require tiene dos funciones
- Cargue el módulo de archivo y ejecute el código en él
- Obtener el objeto de interfaz exportado desde el módulo de archivo cargado
Hay tres tipos de módulos en Node
- Módulos principales : proporcionados por el propio nodo, como el módulo de operación de archivos fs, el módulo de operación de red http
- Módulos de terceros : proporcionados por un tercero, uso del tiempo que necesitamos para
npm
descargar antes de que se pueda cargar usando - Módulos escritos por usuarios : no es fácil de escribir y mantener cuando escribimos mucho código en archivos, por lo que podemos considerar dividir el código en el archivo en varios archivos, luego estos archivos creados por nosotros mismos son módulos de usuario
2. Normas de importación y exportación
2.1 Exportar varios miembros
método uno:
//导出
module.exports.a = 'hello';
module.exports.add = function () {
console.log('add');
}
//导入
let test = require('./a.js')
console.log(test);//{ a: 'hello', add: [Function] }
Debido a que hay mucho escrito además del tipo de punto a punto, demasiados problemas y, por lo tanto, proporciona el
exports
objeto Nodo , elexports 和 module.exports
punto predeterminado para la misma referencia.
Método dos:
//导出
exports.a = "hello";
exports.add = function () {
console.log("add");
}
//导入
let test = require('./a.js')
console.log(test);//{ a: 'hello', add: [Function] }
Método tres (recomendado):
//导出
module.exports = {
a: 'hello',
add: function () {
console.log('add');
}
}
//导入
let test = require('./a.js')
console.log(test);//{ a: 'hello', add: [Function: add] }
2.2 Exportar un solo miembro
Solo hay una forma, solo usemodule.exports = ***
//导出
module.exports = 'hello';
//导入
let test = require('./a.js')
console.log(test);//hello
//导出
module.exports = 'hello';
//后者会覆盖前者
module.exports = function () {
console.log('add');
}
//导入
let test = require('./a.js')
console.log(test);//[Function]
¿Por qué
exports = ***
no puedo exportar un solo miembro? Intentemos
//导出
exports = 'hello';
//导入
let test = require('./a.js')
console.log(test);
//{} 结果是是一个空对象
3. Análisis de principios
- En Node, dentro de cada módulo, hay un módulo de objeto
- En el objeto del módulo , hay un atributo
exports
, las exportaciones también son un objeto
var module = {
exports: {
}
}
- Así como miembro del módulo
exports
es equivalente amodule.exports
var exports = module.exports
console.log(exports === module.exports) // => true
-
Por defecto, hay una frase al final del código:
return module.exports;
es decir, la última exportadamodule.exports
, usamos yrequire
obtenemos la mismamodule.exports
, las reglas anteriores se implementan en la parte inferior, no podemos ver. -
Demostración de código
// 把下面这些代码想象成模块内部的底层实现
// 每个模块内部都有一个 module 对象
// module 对象中有一个成员 exports 也是一个对象
var module = {
exports: {
}
}
// 模块中同时还有一个成员 exports 等价于 module.exports
var exports = module.exports
console.log(exports === module.exports) // => true
// 这样是可以的,因为 exports === module.exports
// module.exports.a = 123
// exports.b = 456
// 对exports重新赋值会断开和 module.exports 的连接,
// 因此这样并不能导出单个成员,因为模块最后 return 的是 module.exports
// exports = function () {
// }
// 这才是导出单个成员的正确方式
module.exports = function () {
console.log(123)
}
// 最后导出的是 module.exports
return module.exports
Déjame explicarlo haciendo un dibujo:
(1) sin reasignación de exportaciones, por defecto module.exports
y exports
apuntan al mismo objeto en la memoria.
(2) reasignación de exportaciones, exports
la desconexión y module.exports
conexión
(3) También podemos restablecer las referencias de relación de conexión, utilizarexports = module.exports
4. Lectura ampliada
https://blog.csdn.net/weixin_43974265/category_10692693.html