在使用ES6导入时,是否可以将某些内容导入到提供变量名称的模块中?
也就是说,我想在运行时根据配置中提供的值导入一些模块:
import something from './utils/' + variableName;
发布于 2015-03-20 22:10:38
而不是使用import
语句。import
和export
的定义方式是可静态分析的,因此它们不能依赖于运行时信息。
您正在寻找loader API (polyfill),但我不太清楚该规范的状态:
System.import('./utils/' + variableName).then(function(m) {
console.log(m);
});
发布于 2016-04-10 21:40:48
虽然这实际上不是动态导入(例如,在我的情况下,我下面导入的所有文件都将由webpack导入并捆绑,而不是在运行时选择),但我一直使用的一个模式在某些情况下可能会有所帮助:
import Template1 from './Template1.js';
import Template2 from './Template2.js';
const templates = {
Template1,
Template2
};
export function getTemplate (name) {
return templates[name];
}
或者:
// index.js
export { default as Template1 } from './Template1';
export { default as Template2 } from './Template2';
// OtherComponent.js
import * as templates from './index.js'
...
// handy to be able to fall back to a default!
return templates[name] || templates.Template1;
我认为我不能像使用require()
那样容易地退回到默认值,如果我试图导入一个不存在的构造模板路径,它会抛出一个错误。
在这里可以找到require和import的很好的例子和比较:http://www.2ality.com/2014/09/es6-modules-final.html
有关从@iainastacio重新导出的优秀文档:http://exploringjs.com/es6/ch_modules.html#sec_all-exporting-styles
我很有兴趣听到关于这种方法的反馈:)
发布于 2016-09-21 21:26:59
您可以使用非ES6表示法来做到这一点。这是对我有效的方法:
let myModule = null;
if (needsToLoadModule) {
myModule = require('my-module').default;
}
https://stackoverflow.com/questions/29168433
复制相似问题