【发布时间】:2016-07-21 22:07:01
【问题描述】:
我需要做类似的事情:
if (condition) {
import something from 'something';
}
// ...
if (something) {
something.doStuff();
}
以上代码无法编译;它抛出SyntaxError: ... 'import' and 'export' may only appear at the top level。
我尝试使用System.import,如图所示here,但我不知道System 来自哪里。这是一个没有被接受的 ES6 提案吗?那篇文章中指向“程序化 API”的链接将我转储到 deprecated docs page。
【问题讨论】:
-
我的用例:我想让一个可选的依赖项变得容易。如果不需要该dep,则用户将其从
package.json中删除;我的gulpfile然后在执行一些构建步骤之前检查该依赖项是否存在。 -
另一个用例:用于测试目的。我正在使用
webpack和babel将 es6 转换为 es5。webpack-rewire和类似的项目在这里没有帮助 - github.com/jhnns/rewire-webpack/issues/12 。设置测试替身或删除有问题的依赖项的一种方法可能是条件导入。 -
+1。能够在依赖项可能起作用或可能不起作用的多个环境中使用模块至关重要,特别是当模块可能引用仅在浏览器中起作用的依赖项时(例如,
webpack用于将样式表转换为插入相关的模块样式导入 DOM 时),但模块还需要在浏览器之外运行(例如,用于单元测试)。 -
如果此
(condition)可以在构建时解决,则可以准备产品的不同预处理版本并删除条件。例如,(condition)用于区分前端(浏览器)和后端(普通 js)。那么条件语句就变得不必要了。
标签: javascript module ecmascript-6