2016-11-08 4 views
1

레거시 JS 시스템의 일부에서 TypeScript를 사용하려고합니다. 이 시스템에는 응용 프로그램이 시작될 때 main.js가 실행되는 RequireJS 환경에서 실행되는 많은 응용 프로그램이 있습니다. 이 구조를 만들었습니다TypeScript 1.8 요구 사항이있는 AMD 스타일 모듈의 1.8 상대 모듈 이름 확인

App1/ 
    main.js 
    app.ts 
    Modules/ 
     myModule.ts 
     Models/ 
     model1.js 
     model2.js 

모델은 생성 된 코드이며 .JS 파일로 유지되어야합니다. 모델은 다른 .ts 모듈의 'Require'문에 의해 요구되어야합니다.

모듈 파일의 선언 파일에서 .ts 파일을 컴파일하도록하는 방법을 알고 있습니다.

declare module "Models/model1" { var x:any; export = x;} 

그러나이 myModule.ts

define(["require","exports","Models/model1", function(require,exports,model){ ... 

에 대한 이러한 AMD 모듈 정의를 작성하지만 경로가

http://mysite/Models/model1.js 

로 Require.JS에 의해 해결됩니다 때문에 실행되지 않습니다 코드 경로는 상대 경로이며 RequireJS의 컨텍스트 루트에서 절대 경로 여야하므로 경로 섹션이 누락되었습니다. 생성 된 파일이기 때문에 TS로 모델을 가질 수 없습니다. .ts 으로 이름을 바꾸는 것만으로는 컴파일되지 않습니다. 또한 응용 프로그램이 하네스, 프로덕션 및 단위 테스트 설정에서 실행하는 다양한 방법으로 인해 비 관련 경로를 사용할 수 없습니다.

질문 : TypeScript에서 JavaScript (.js) 모듈의 상대 경로를 생성 할 수있는 방법이 있습니까?

답변

2

Triple-Slash Directives을 들여다 보았습니까? 타이프 라이터 2.0으로이 import "moduleName"을 위해 사용되지 않습니다하지만 이전 버전에 대한 작동합니다 :

/// <amd-dependency path="x" />는 결과 모듈의 필요한 호출에 주입 할 필요가있는 비 TS 모듈 의존성에 대한 컴파일러를 알려줍니다.

amd-dependency 지시문은 선택적 name 속성을 가질 수도 있습니다.

/// <amd-dependency path="legacy/moduleA" name="moduleA"/> 
declare var moduleA:MyType 
moduleA.callStuff() 

생성 JS 코드 :

define(["require", "exports", "legacy/moduleA"], function (require, exports, moduleA) { 
    moduleA.callStuff() 
}); 
이는 AMD 의존성의 선택적 이름을 전달 허용