patron node modulos funciones exportar es6 convertir javascript module ecmascript-6 es6-modules

javascript - node - Pasar opciones a las importaciones del módulo ES6



patron modulo javascript (4)

Concepto

Aquí está mi solución usando ES6

Muy en línea con la respuesta de @Bergi, esta es la "plantilla" que uso al crear importaciones que necesitan parámetros aprobados para class declaraciones de class . Esto se usa en un marco isomorfo que estoy escribiendo, por lo que funcionará con un transpiler en el navegador y en node.js (yo uso Babel con Webpack ):

./MyClass.js

export default (Param1, Param2) => class MyClass { constructor(){ console.log( Param1 ); } }

./main.js

import MyClassFactory from ''./MyClass.js''; let MyClass = MyClassFactory(''foo'', ''bar''); let myInstance = new MyClass();

Lo anterior generará foo en una consola

EDITAR

Ejemplo de mundo real

Para un ejemplo del mundo real, estoy usando esto para pasar un espacio de nombres para acceder a otras clases e instancias dentro de un marco. Debido a que simplemente estamos creando una función y pasando el objeto como un argumento, podemos usarlo con nuestra declaración de clase likeso:

export default (UIFramework) => class MyView extends UIFramework.Type.View { getModels() { // ... UIFramework.Models.getModelsForView( this._models ); // ... } }

La importación es un poco más complicada y automagical en mi caso dado que es un marco completo, pero esencialmente esto es lo que está sucediendo:

// ... getView( viewName ){ //... const ViewFactory = require(viewFileLoc); const View = ViewFactory(this); return new View(); } // ...

¡Espero que esto ayude!

¿Es posible pasar opciones a las importaciones de ES6?

Cómo traduces esto:

var x = require(''module'')(someoptions);

a ES6?


Basándose en la answer @ Bergi para usar el módulo de depuración con es6 sería la siguiente

// original var debug = require(''debug'')(''http''); // ES6 import * as Debug from ''debug''; const debug = Debug(''http''); // Use in your code as normal debug(''Hello World!'');



No hay forma de hacer esto con una sola declaración de import , no permite las invocaciones.

Entonces no lo llamarías directamente, pero básicamente puedes hacer exactamente lo mismo que commonjs con las exportaciones predeterminadas:

// module.js export default function(options) { return { // actual module } } // main.js import m from ''module''; var x = m(someoptions);

Alternativamente, si usa un cargador de módulos compatible con las promesas monadic , es posible que pueda hacer algo como

System.import(''module'').ap(someoptions).then(function(x) { … });

Con el nuevo 2ality.com/2017/01/import-operator.html podría convertirse en

const promise = import(''module'').then(m => m(someoptions));

o

const x = (await import(''module''))(someoptions)

sin embargo, probablemente no desee una importación dinámica, sino una estática.