你可以在 TypeScript 中使用Dynamic Import Expressions:
动态导入表达式是 ECMAScript 的一项新功能和一部分
允许用户以任意方式异步请求模块
点在你的程序中。
这意味着你可以有条件地懒惰地导入其他模块
和图书馆。例如,这是一个只导入的异步函数
需要时的实用程序库。
(在 JavaScript 中,仍然是一个提案:https://github.com/tc39/proposal-dynamic-import)
例子:
你有一个主文件和两个依赖项。
./main.ts
./dependency-a.ts
./dependency-b.ts
依赖 'a' 将快速加载。
console.log('exporting dependency-a');
export const a = () => {
console.log('called dependency-a');
};
虽然依赖 'b' 会加载缓慢。
console.log('exporting dependency-b');
// We'll emulate a slow synchronous task with a loop to add delay
// https://stackoverflow.com/a/38839049/4669212
function wait(ms: number) {
var start = Date.now(),
now = start;
while (now - start < ms) {
now = Date.now();
}
}
wait(5000);
export const b = () => {
console.log('called dependency-b');
};
在你的主文件中,你有条件地调用了导出的函数,但是由于依赖'b',启动时间会很慢,即使你只是想调用依赖'a':
import { a } from './dependency-a';
import { b } from './dependency-b';
const run = (dep: 'a' | 'b') => {
switch (dep) {
case 'a':
return a();
case 'b':
return b();
default:
console.log('do nothing');
}
};
run();
您可以像这样使用动态 import() 表达式:
const run = (dep: 'a' | 'b') => {
switch (dep) {
case 'a':
return import('./dependency-a').then(({ a }) => {
a();
});
case 'b':
return import('./dependency-b').then(({ b }) => {
b();
});
default:
console.log('do nothing');
}
};
run('a');
当您运行依赖项“a”时,将不会加载慢速依赖项“b”——它是导入语句,如果有的话。这意味着您的 CLI 将有更好的启动时间。