题 TypeScript:编译删除未引用的导入


在我们的项目中,我们使用RequireJS作为模块加载器。我们的一些模块将影响全局库,因此不会直接在它们被引用的模块中使用。

例:

define(['definitely/goingto/usethis/','just/referencingthis/forpackaging'], function(useThis) {
    useThis.likeIPromised();

    // the following call can only be made when the second required file is available
    someGlobalAvailableVariable.someMethod();
});

在JavaScript中编写模块时,这可以正常工作。但是,我们正在逐步将项目翻译为TypeScript。鉴于上面的示例,这会导致:

import useThis = module("definitely/goingto/usethis/");
import whatever = module("just/referencingthis/forpackaging");

useThis.likeIPromised();

// I've written a definition file so the following statement will evaluate
someGlobalAvailableVariable.someMethod();

在将其编译为JavaScript时, 编译器想要有用并删除任何未使用的导入。因此,这会破坏我的代码,导致第二个导入的模块不可用。

我目前的工作是包括一个冗余的任务,但这看起来很难看:

import whatever = module("just/referencingthis/forpackaging");
var a = whatever; // a is never ever used further down this module

有谁知道是否可以配置TypeScript编译器在编译期间不优化模块?


32
2018-03-07 09:40


起源


我假设您不能将导入移动到适当的模块? - user75525
它们在适当的模块中。我的项目主要由小部件组成。每个小部件都包含在自己的模块中。我正在使用Handlebars进行模板化,并希望将结果视图与我的窗口小部件定义文件一起打包。在引用这样的视图时,它将在全局变量'Handlebars'上公开一个具有相同名称的方法。因此,我不需要引用模块,因为它将为我定义方法。 - thomaux


答案:


更好的解决方案(使用TS 1.8测试):

import 'just/referencingthis/forpackaging';

amd-dependency triple-slash-directive似乎只有在有其他需要导入时才有效;只有amd-dependency指令才会导致TypeScript编译器在没有模块定义的情况下完全生成JavaScript。


8
2018-04-27 16:14





您可以在文件顶部执行此操作(而不是 import):

/// <amd-dependency path="just/referencingthis/forpackaging" />

26
2018-03-07 17:05



哇!不知道这个功能,谢谢! - thomaux
同意,希望它有记录 - JasonS
非常有帮助,谢谢。 - Tarion
如果我使用commonjs该怎么办?我希望有一个命令行标志来关闭它:-( - obe
如果使用commonjs或systemjs,这个答案似乎不起作用 - lightswitch05