¿Es posible pasar opciones a las importaciones de ES6?
Cómo traduces esto:
var x = require('module')(someoptions);a ES6?
No hay forma de hacer esto con una sola declaración de import , no permite invocaciones.
Por lo tanto, no lo llamaría directamente, pero básicamente puede hacer lo mismo que hace 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 que admita promesas monádicas , es posible que pueda hacer algo como
System.import('module').ap(someoptions).then(function(x) { … }); Con el nuevo operador de import podría convertirse
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 estática.
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 que se pasen parámetros para las declaraciones de class . Esto se usa en un marco isomorfo que estoy escribiendo, por lo que funcionará con un transpilador en el navegador y en node.js (uso Babel con Webpack ):
./MiClase.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
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 así:
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!
Basándose en la respuesta de @Bergi para usar el módulo de depuración usando es6 sería lo 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!');