在node.js ES6variables导入名称?

是否有可能在使用ES6导入时将某些东西导入到提供variables名称的模块中?

也就是说,我想在运行时导入一些模块,具体取决于configuration中提供的值:

import something from './utils/' + variableName; 

不与import声明。 importexport是以静态可分析的方式定义的,所以它们不能依赖运行时信息。

你正在寻找加载器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}`)} />