节点中的 ES6 变量导入名称.js?
2022-08-30 04:35:08
是否可以在使用ES6导入时将某些内容导入到提供变量名称的模块中?
即,我想根据配置中提供的值在运行时导入一些模块:
import something from './utils/' + variableName;
是否可以在使用ES6导入时将某些内容导入到提供变量名称的模块中?
即,我想根据配置中提供的值在运行时导入一些模块:
import something from './utils/' + variableName;
不是用语句。 并且以静态可分析的方式进行定义,因此它们不能依赖于运行时信息。import
import
export
您正在寻找加载程序API(polyfill),但我对规范的状态有点不清楚:
System.import('./utils/' + variableName).then(function(m) {
console.log(m);
});
虽然这实际上不是动态导入(例如,在我的情况下,我在下面导入的所有文件都将由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()
可以在此处找到需求和导入之间的良好示例和比较:http://www.2ality.com/2014/09/es6-modules-final.html
关于从@iainastacio再出口的优秀文件:http://exploringjs.com/es6/ch_modules.html#sec_all-exporting-styles
我很想听听关于这种方法的反馈:)