是否可以将选项传递给 ES6 导入?
你怎么翻译这个:
var x = require('module')(someoptions);
到 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);
或者,如果您使用支持monadicPromise的module加载器,您可能可以执行以下操作
System.import('module').ap(someoptions).then(function(x) {
…
});
有了新的import
运营商,它可能会变成
const promise = import('module').then(m => m(someoptions));
或者
const x = (await import('module'))(someoptions)
但是,您可能不需要动态导入,而是需要静态导入。
这是我使用 ES6 的解决方案
非常符合@Bergi 的响应,这是我在创建需要为class
声明传递参数的导入时使用的“模板” 。这用于我正在编写的同构框架上,因此将与浏览器和 node.js 中的转译器一起使用(我使用Babel
with 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();
以上将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();
}
// ...
我希望这有帮助!
我相信你可以使用 es6 module加载器。 http://babeljs.io/docs/learn-es6/
System.import("lib/math").then(function(m) {
m(youroptionshere);
});
您只需要添加这两行。
import xModule from 'module';
const x = xModule('someOptions');