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

Requirejs 防止tsc编译器忽略不必要的外部模块,requirejs,typescript,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,

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
。正如我所说的,这个特性非常好,但是现在我有了一个场景,在这个场景中,我需要包括一些外部模块,即使它们在代码中的任何地方都没有实际使用


有人知道怎么做吗?为了避免任何误解,我不是在寻找一种完全禁用此功能的方法,只是针对一些特定的模块。

有一种简单的方法可以让编译器同时包含以下两种功能:

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

var a = new A();
var b = B;
变量
b
在您的程序中成为噪音,因此我不会过多地使用此技术,但是如果
b
模块正在进行多填充或类似的操作,这意味着您永远不想直接实例化它,这将为您加载它。

另一种方法:

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

无需创建虚构的代码

我感谢您的帮助,但不幸的是,这是不可接受的。因为这个解决方案并不总是可行的。实例化
B
可能会触发一些我不能/不想掉以轻心的动作。它可能会在需要完成的基础上做一些需要完成的事情。您还没有实例化它。您已经创建了对它的引用。要实例化
B
,可以使用
var B=new B(),而
var b=b
只是创建了一个对
b
的引用,称为
b
。没问题-很高兴它有帮助。+1这是一个整洁的特性,但请记住,它还没有进入TypeScript语言规范,因此不能保证它会保留在编译器中(尽管它似乎不太可能被删除).