我有一个用TypeScript编写的node.js应用程序,我需要根据配置文件在两个接口实现之间切换。目前我有这段代码,看起来可以正常工作。
"use strict";
import { config } from "../config";
let Something;
if (config.useFakeSomething) {
Something = require("./FakeSomething").FakeSomething;
} else {
Something = require("./RealSomething").RealSomething;
}
...
let s = new Something();
s.DoStuff();
...
但是我有一种不好的直觉(主要是因为在加载模块时混合了require和import)。有没有其他方法可以在不导入两个模块的情况下实现基于配置文件的切换?
5条答案
按热度按时间ix0qys7i1#
如果你想让
Something
类的客户端代码保持干净,你可以把条件导入移到一个文件中。你可以为你的Something模块设置如下的目录结构:在您的index.ts中,可以包含以下内容:
在客户机代码中,您可以只导入
Something
:rxztt3cl2#
我看不出你的方法有什么问题。事实上
当目标为commonjs时,将编译为以下javascript(ES6):
因此它们实际上是相同的,您不会混合使用不同的模块加载技术。
z4bn682m3#
你可以这样做:
然后
7gcisfzg4#
除了上面的正确答案之外,如果您需要对单个文件夹中的多个文件进行这种切换,您可以使用引用正确文件夹的符号链接(Windows上不可用),这样您的代码就可以保持干净。
例如,这种方法对于在真实的代码和存根之间切换很有好处
46qrfjad5#
使用**import()**函数的现代答案是:
记住import()是非阻塞的,所以如果下面的代码需要import()的结果,就需要添加await。