防止tsc编译器省略不必要的外部模块

时间:2014-10-12 16:25:40

标签: requirejs typescript

TypeScript中有一个我非常喜欢的功能,那就是使用RequireJs的外部模块,以及编译器不包含导入模块的事实,除非代码中实际需要它们。这是一个例子:

import A = require('./A');
import B = require('./B');

var a = new A();

使用tsc --module amd example.ts编译上述代码时,它将转换为:

define(["require", "exports", './A'], function(require, exports, A) {
    var a = new A();
});

正如您所看到的,生成的代码中没有B的迹象。那是因为实际上没有使用B。正如我所说的这个功能很棒,但现在我有一个场景,我需要包含一些外部模块,即使它们实际上没有在代码中的任何地方使用过。

有谁知道怎么做?为了防止任何误解,我不是想找到一种完全禁用此功能的方法,仅针对某些特定模块。

2 个答案:

答案 0 :(得分:5)

另一种方法:

/// <amd-dependency path="./B" />
import A = require('./A');

无需创建虚构代码

答案 1 :(得分:1)

你可以做一个简单的小提琴,让编译器包含两者:

import A = require('./A');
import B = require('./B');

var a = new A();
var b = B;

变量b在你的程序中变成了噪音,所以我不会过多地使用这种技术,但是如果B模块正在进行polyfill或类似的东西,这意味着你永远不会想要要直接实例化它,这会为你加载它。