Se sabe que cada módulo en Node.js está envuelto en una función, donde se pasan 5 argumentos (es decir, exports , module , require , __filename , __dirname ) y se devuelve el objeto module.exports .
Dado que las exports son solo un alias para module.exports , ¿hay alguna razón por la cual tanto el módulo como las exportaciones se enumeran como 2 argumentos separados? ¿No sería mejor si solo se pasara el objeto del module ? Esto evitaría que el objeto de exportaciones se reasignara involuntariamente si el usuario hiciera una reasignación de nivel superior (por ejemplo, exports = {x: 5} ).
En términos de diseño, ¿es simplemente por la facilidad de acceder al objeto de exportación? Siento que me estoy perdiendo algo aquí.
No pude encontrar respuesta a esta pregunta, pero estoy feliz de ser redirigido a una existente.
// function (exports, module, require, __filename, __dirname) { const a = 1; console.log(a); // return module.exports; // }Como dice el documento node.js:
Permite un atajo, por lo que module.exports.f = ... se puede escribir de manera más sucinta como exportaciones.f = .... Sin embargo, tenga en cuenta que, como cualquier variable, si se asigna un nuevo valor a las exportaciones, es ya no está vinculado a module.export
module.exports.hello = true; // Exported from require of module exports = { hello: false }; // Not exported, only available in the moduleCuando la propiedad module.exports se reemplaza completamente por un nuevo objeto, es común reasignar también las exportaciones:
module.exports = exports = function Constructor() { // ... etc. };https://nodejs.org/docs/latest/api/modules.html#exports-shortcut