我正在考虑使用ES6约定更新一些旧的js libs,但是我遇到了一个绊脚石。
所以历史上,当我动态加载JSON文件时,我会做这样的事情:
this.someFunctionWhichDoesStuff = function() {
var config = require(theConfigDir); // theConfigDir was a variable
// ... other stuffs
}
这很好用,在某些情况下我也会动态地包含文件夹中的一些模块:
this.someFunctionWhichDoesStuff = function() {
var actualImplementationToUse = require(theDirectoryWithImplementation); // theConfigDir was a variable
// ... other stuffs
}
这允许我根据早期点的配置切换实现,并且运行良好。这里需要注意的要点是模块的解析器是变量而不是静态文本,并且它们是在不在根级别的函数内部运行。
因此,考虑到这一点,我转到TS中的es6样式模块包含,并意识到我不能执行上述操作,因为这不是有效的语法:
public someFunctionWhichDoesStuff() {
import actualImplementationToUse from theDirectoryWithImplementation;
// ... other stuffs
}
这是有道理的,因为我知道ES6模块需要静态解析模块,所以我很酷,但在typescript 1.6世界中,我不确定如何解决这个问题,因为var includedModule = require(theDirectory);
似乎无效它不知道require
,它可以通过包含节点js d.ts
文件来解决,但是我希望有人可以指导一下在新的es6世界中期望的方法是什么?
答案 0 :(得分:0)
确定我知道我可以做到这一点,但有更多的es6方法吗?即如果我使用require,我会被锁定使用所有消费者的需求(无论是浏览器还是节点),我想没有,但我只是想在我走这条路线之前检查一下。
ES6规范无论如何都没有指定模块加载器(SystemJS只是一个示例非标准实现),而且大多数情况下你想要转换为es5。因此,使用require
并不是一个坏主意(特别是对于非.ts
/ .js
个文件)