Passa le opzioni alle importazioni di moduli ES6

È ansible passare opzioni alle importazioni ES6?

Come traduci questo:

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

per ES6?

Non c’è modo di farlo con una singola dichiarazione di import , non consente invocazioni.

Quindi non lo chiameresti direttamente, ma puoi fondamentalmente fare lo stesso che commonjs fa con le esportazioni predefinite:

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

In alternativa, se usi un caricatore di moduli che supporta promesse monadiche , potresti essere in grado di fare qualcosa del genere

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

Con il nuovo operatore di import potrebbe diventare

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

o

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

tuttavia probabilmente non vuoi un’importazione dynamic ma statica.

Concetto

Ecco la mia soluzione con ES6

Molto in linea con la risposta di @ Bergi, questo è il “modello” che utilizzo durante la creazione delle importazioni che necessitano di parametri passati per class dichiarazioni di class . Questo è usato su un framework isomorfo che sto scrivendo, quindi funzionerà con un transpiler nel browser e in node.js (io 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(); 

Quanto sopra uscirà da foo in una console

MODIFICARE

Esempio di mondo reale

Per un esempio reale, lo sto usando per passare in uno spazio dei nomi per accedere ad altre classi e istanze all’interno di un framework. Poiché stiamo semplicemente creando una funzione e passando l’object come argomento, possiamo usarlo con la nostra dichiarazione di class likeso:

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

L’importazione è un po ‘più complicata e automagical nel mio caso, dato che è un intero framework, ma essenzialmente questo è ciò che sta accadendo:

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

Spero che aiuti!

Basarsi sulla risposta di @ Bergi per usare il modulo di debug usando es6 sarebbe la seguente

 // 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!'); 

Credo che tu possa usare i caricatori di moduli es6. http://babeljs.io/docs/learn-es6/

 System.import("lib/math").then(function(m) { m(youroptionshere); }); 

Hai solo bisogno di aggiungere queste 2 linee.

 import xModule from 'module'; const x = xModule('someOptions');