你如何防止打字稿自动丢弃'未使用'依赖呢?

时间:2014-06-10 07:18:39

标签: typescript js-amd

具体想象一下这个场景:我有一个jquery插件$ .mega()。

我可以为这个插件创建一个定义文件,如下所示:

/// <reference path="../jquery/jquery.d.ts"/>

// Extend jquery with .mega()
interface JQuery { mega(options?:any):void; }

// Declare an external module, to import mega using AMD.
// NB. You still need to setup require.js to find the bower module.
declare module mega { export function dummy():void; }
declare module "mega" { export = mega; }

然后我可以使用以下命令从脚本调用插件:

/// <reference path="../../defs/jquery/jquery.d.ts"/>
/// <reference path="../../defs/mega/mega.d.ts"/>
import mega = require('mega');
import $ = require('jquery');

((...r:any[]) => {})(mega);  // <---- WTF!

$('.target').mega();

由于打字稿会自动修剪并丢弃未使用的依赖关系作为优化步骤,而不实际使用模块,该模块将被丢弃,因此我不得不使用以下方式“伪造”模块的使用: / p>

((...r:any[]) => {})(mega); 

如果没有这个,编译的javascript看起来像:

define(["require", "exports", 'jquery'], function(require, exports, $) {
    //((...r:any[]) => {})(mega);
    $('.target').mega();
});

那么,有什么方法可以确保在打字稿编译时不需要'优化'吗?

编译标志或构建定义文件的特殊方式对我来说都可以正常工作〜

的Nb。这更适用于AMD,但它适用于commonjs模块。

2 个答案:

答案 0 :(得分:4)

您可以使用amd-dependency指定您希望在amd define调用中提升的内容,例如:

/// <amd-dependency path="mega" />

答案 1 :(得分:1)

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

import 'mega';

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