Quiero crear una biblioteca Velbus (domótica) para importar en cualquier proyecto con Node.JS. Sin embargo, hay muchas funciones (a veces 6 o más) en cada tipo de módulo Velbus, por lo que quiero dividir mi biblioteca real en submódulos (primitives_blind.js, natives_relay.js, natives_tempSensor.js, etc.) Puedo importarlos en mi biblioteca principal VelbusLib.js, pero no sé cómo permitir que un usuario solo importe mi módulo principal, pero use la función de los submódulos.
Ejemplo: primitivos_ciegos.js
function blindUP(adr, part) { ... } function blindDOWN(adr, part) { ... } function blindStatus(adr, part) { ... } module.exports = { blindUP, blindDOWN, blindStatus }VelbusLib.js
const blind = require('./primitives_blind.js')index.js (una aplicación)
const velbusLib = require('./VelbusLib.js') ... velbusLib.blindUP(0x40, 1) // blind.blindUP() not wanted, because user have to import all submodulesPor supuesto, no es posible exportar la función importada
module.exports = { CheckSum, Cut, // blindUP or blind.blindUP aren't possible Un pequeño esquema a menudo es mejor que una larga discusión:
¿Alguien puede explicarme el "Estado del arte" sobre esto? Gracias :)
Sospecho que está buscando la sintaxis de propagación literal del objeto
const blind = require('./primitives_blind.js') module.exports = { CheckSum, Cut, ...blind, };que esencialmente hace lo mismo que
const blind = require('./primitives_blind.js') module.exports = { CheckSum, Cut, blindUP: blind.blindUP, blindDOWN: blind.blindDOWN, blindStatus: blind.blindStatus, }; Sin embargo, dado que estaba preguntando por el estado del arte: use la sintaxis del módulo ES6 para toda la biblioteca, ¡no el módulo module.exports ! Con eso seria
export * from './primitives_blind.js';Después de mucha investigación, parece que no está implícito tener muchos submódulos (ModA, ModB, ModC) e importar un módulo ModX en una aplicación "APP" y usar Importar ModA, ModB, ModC desde él.
Sin embargo, es posible exportar desde ModX, algunas importaciones desde ModA o ModB o ModC:
En ModX.js:
import {actionA1, actionA2} from './ModA' import ModB from './ModB' import * from './ModC' ... export { actionA2, ModB }Luego en app.js:
import ModX from './ModX' ... let Foo = actionA2(something) let Bar = ModB.actionB(somethingElse)Gracias @bergi por su corrección.