2014-06-10 4 views
3

구체적으로이 시나리오를 상상해보십시오. jquery 플러그인 $ .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(); 

폐기 미사용 :

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

그럼 내가 사용하는 스크립트에서 플러그인을 호출 할 수 있습니다 모듈을 실제로 사용하지 않고 최적화 단계로서의 종속성을 제거하면 해당 모듈이 폐기되므로 강제로 모듈 사용을 "위조"합니다.

그래서

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

필요가 타이프 라이터가 컴파일 할 때 '최적화'되지 않습니다 포함하는 보장하는 몇 가지 방법이이없이

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

는 컴파일 된 자바 스크립트처럼 보인다?

컴파일 플래그, 또는 ~

Nb를 나를 위해 잘 작동 할 정의 파일을 구축하는 특별한 방법 중 하나. 이것은 AMD의 경우 더 많지만 commonjs 모듈과 동일하게 적용됩니다.

+0

[TypeScript : 컴파일시 참조되지 않은 가져 오기를 제거 할 수 있습니다.] (0120-367-301) – thomaux

답변

4

당신은 예를 들어 전화를 정의하는 AMD에 게양 할 물건을 지정 amd-dependency을 사용할 수 있습니다

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

이 문제는 /////////////////////////////////////////// import sortable = require ('sortable'); 나를 위해 아무것도하지 않는다. 코드 예제로 답을 주시겠습니까? –

+0

TypeScript 파일에 최소 1 개의 호출이 필요한 경우에만 작동하는 것으로 보입니다. – bcody

+0

NB : 이것은 더 이상 사용되지 않지만 TS 문서에서 우리가 대신해야 할 일을 알 수는 없습니다. – iono

1

더 좋은 솔루션 (TS 1.8 테스트) :

import 'mega'; 

AMD의 의존성 트리플 슬래시 지시문은 다른 수입품이 필요한 경우에만 작동하는 것처럼 보입니다. amd-dependency 지시문 만 있으면 TypeScript 컴파일러에서 모듈 정의없이 JavaScript를 완전히 생성합니다.

+0

''jsx ''를 사용하여 모듈 ('vdom-module '의'import {makeHtml})을 내보내고 싶습니다 : ".tsx"가'.jsx'로 변환되기 때문에, tsc는 단순히 jsx를 무시하고'jsx'에서 가상 DOM을 렌더링하기 위해 필요한 사용되지 않는 모듈을 제거합니다. –