js amd - Hvordan forhindrer man, at TypeScript automatisk kasserer 'ubrugte' afhængigheder?


Forestil dig specifikt dette scenarie: Jeg har et jquery-plugin $.mega().

Jeg kan oprette en definitionsfil for dette plugin som følger:

/// <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; }

Så kan jeg påkalde pluginen fra et script ved at bruge:

/// <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();

Da TypeScript automatisk beskærer og kasserer ubrugte afhængigheder som et optimeringstrin, uden faktisk at bruge et modul, bliver modulet kasseret, så jeg er tvunget til at 'lade som om' at bruge modulet ved hjælp af:

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

Uden dette ser den kompilerede javascript sådan ud:

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

Så er der en måde at sikre, at require-includes ikke bliver 'optimeret', når TypeScript kompilerer?

Enten en kompilationsflag eller en særlig måde at opbygge definitionsfilen på ville fungere fint for mig~

Bemærk. Dette er mere for AMD, men det gælder lige så meget for commonjs-moduler.

Svar #1

Du kan bruge amd-dependency til at angive ting, du vil have løftet i amd define-kaldet, f.eks.:

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

Svar #2

En bedre løsning (testet med TS 1.8):

import 'mega';

Den amd-dependency triple-slash-direktiv ser ud til kun at fungere, hvis der er andre require-imports; kun at have amd-dependency-direktiver resulterer i, at TypeScript-kompilatoren genererer JavaScript helt uden en modulet-definition.

Relaterede artikler