在node.js ES6variables导入名称?
是否有可能在使用ES6导入时将某些东西导入到提供variables名称的模块中?
也就是说,我想在运行时导入一些模块,具体取决于configuration中提供的值:
import something from './utils/' + variableName;  不与import声明。  import和export是以静态可分析的方式定义的,所以它们不能依赖运行时信息。 
你正在寻找加载器API(polyfill) ,但是我对规范的状态有点不清楚:
 System.import('./utils/' + variableName).then(function(m) { console.log(m); }); 
除了Felix的回答 ,我会明确地注意到ECMAScript 6语法目前不允许这样做:
导入声明 :
导入 ImportClause FromClause;
导入 ModuleSpecifier;
FromClause :
- 来自 ModuleSpecifier
ModuleSpecifier :
- string字面量
一个ModuleSpecifier只能是一个StringLiteral ,而不能像AdditiveExpression这样的其他types的expression式。
虽然这实际上不是一个dynamic导入(例如,在我的情况下,下面导入的所有文件都将被导入并绑定到webpack,而不是在运行时select),我一直在使用的模式可能有助于某些情况:
 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; 
 如果我尝试导入一个不存在的构造的模板path,我不认为我可以像require()那样简单地回退到默认值。 
要求和导入之间的好例子和比较可以在这里find: http : //www.2ality.com/2014/09/es6-modules-final.html
有关从@iainastacio重新导出的出色文档: http ://exploringjs.com/es6/ch_modules.html#sec_all-exporting-styles
我很想听到关于这个方法的反馈:)
您可以使用非ES6表示法来做到这一点。 这是什么对我有用:
 let myModule = null; if (needsToLoadModule) { myModule = require('my-module').default; } 
 我不喜欢这个语法,但它的工作: 
 而不是写作 
 import memberName from "path" + "fileName"; // this will not work!, since "path" + "fileName" need to be string literal 
使用这个语法:
 let memberName = require("path" + "fileName"); 
我会这样做
 function load(filePath) { return () => System.import(`${filePath}.js`); // Note: Change .js to your file extension } let A = load('./utils/' + variableName) // Now you can use A in your module 
使用ES6模板string我成功地导入了dynamicvariables,这里是我的样板 – 这是关于通用JavaScript,但它应该在不同的configuration上工作:
 const myImg = './cute.jpg' <img src={require(`${myImg}`)} />