2016-12-07 1 views
0

우리는 AMD Loader로 RequireJS를 사용하는 직장에서 TypeScript를 사용하고 있으며, 꽤 잘 작동합니다. 내 개인용 JS 라이브러리를 TypeScript로 변환하고 궁금해합니다. Type30의 내장 모듈 시스템을 사용하여 을 전역으로 내보낼 수 있습니까?을 정의하십시오. 최종 사용자가있는 경우 require/amd를 사용하십시오. 그것을 사용하고 있습니까?전역 내보내기 및 TypeScript 모듈 시스템을 통한 정의?

필자는 기존 사용자와의 호환성을 손상시키지 말고 필요성을 강요하지 않으려합니다.

내 기존의 JS 파일이이 세계를 정의하고 정의 된 정의하면, TickerGraph 정의하는 등 배치되어

: 내 타이프 라이터 재 작성에

var TickerGraph = (function() { …class code… }); 

if(typeof define == "function") { 
    define([], function() { 
     return TickerGraph; 
    }); 
} 

을, 나는 정의 된 모듈 유형을 배치했습니다 UMD로 다음과 같이

드를 확인

(function (dependencies, factory) { 
    if (typeof module === 'object' && typeof module.exports === 'object') { 
     var v = factory(require, exports); if (v !== undefined) module.exports = v; 
    } 
    else if (typeof define === 'function' && define.amd) { 
     define(dependencies, factory); 
    } 
})(["require", "exports"], function (require, exports) { 
    "use strict"; 
    return (function() { 

출력

export = class TickerGraph { …class code… } 

그 괜 찮 아 요/수출하지만 않습니다 글로벌을 정의 ...

나는 실험을하고 모든 내보내기 함께 제거 글로벌,하지만 물론 더 이상 정의합니다. 여기에 어떤 도움이라도 대단히 감사하겠습니다.

답변

1

이렇게하는 유일한 방법은 이 아니라 typecript 모듈 시스템을 사용하는 것입니다.

Typescript 컴파일러 자체가 좋은 예입니다. lib/tsc.js은 노드 모듈과 전역 스크립트로 모두 사용될 수 있습니다. 그들은 그것을 달성하기 위해 따라야 할 규칙 (나를 위해, 적어도) 세트가-잘 알려져 있지 않다

는 :

  • 가없는 최상위 레벨에있는 export 또는 import. namespace ts { }

  • 하나 개의 파일은 각 파일이 namespace ts { }의 모든 컨텐츠를 가지고 제공, 다른 파일에서 기호를 사용할 수있는 내부 그들이 가지고있는 모든 export이다. 상호 의존적 인 모든 파일이 함께 컴파일되거나 올바른 /// <reference 지시문을 가지고 있는지 확인해야합니다. 여기서는 --outFile 옵션을 사용하여 여러 가지 타이프 스크립트 파일에서 단일 출력 파일을 생성한다고 가정합니다. 본질적으로

, 당신은 네임 스페이스 ts 내부의 모든 것을 모든 파일에서 구성된 하나의 거대한 글로벌 스크립트를 만들 수 있습니다. 결과 출력은 최상위 레벨에 var ts이되어 일반 스크립트로 포함하면 전역이됩니다. 노드 모듈로 사용할 수 있도록하기 위해

, 그들은 shims.ts에이 코드를 가지고 :

// Here we expose the TypeScript services as an external module 
// so that it may be consumed easily like a node module. 
declare var module: any; 
if (typeof module !== "undefined" && module.exports) { 
    module.exports = ts; 
} 

당신은 define 대신 module의를 사용하여 모듈에 대한 비슷한 일을해야 할 것입니다.내가 아는 한 기본 지원이 없습니다.