将选项传递给ES6模块导入

是否有可能将选项传递给ES6进口?

你如何翻译这个:

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

到ES6?

没有办法使用单个import语句来执行此操作,但不允许调用。

所以你不会直接调用它,但基本上可以做到commonjs与默认导出一样的功能:

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

另外,如果你使用一个支持monadic promise的模块加载器,你也许可以做类似的事情

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

概念

这是我使用ES6的解决方案

非常符合@ Bergi的回应,这是创建导入时需要使用的“模板”,需要为class声明传递的参数。 这是在我正在写的同构框架上使用,所以将在浏览器和node.js中使用一个转译器(我使用Webpack Babel ):

./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(); 

以上将在控制台中输出foo

编辑

真实世界的例子

对于一个真实世界的例子,我使用它来传入一个名称空间来访问框架内的其他类和实例。 因为我们只是简单地创建一个函数并把这个对象作为参数传入,所以我们可以在我们的类声明中使用它:

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

输入是一个复杂和automagical在我看来,这是一个完整的框架,但基本上这是发生了什么事情:

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

我希望这有帮助!

建立在@ Bergi 答案使用调试模块使用es6将是以下

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

我相信你可以使用es6模块装载机。 http://babeljs.io/docs/learn-es6/

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