2016-11-08 5 views
1

レガシーJSシステムの一部でTypeScriptを使用しようとしています。 このシステムでは、アプリケーションの起動時にmain.jsが実行されるRequireJS環境で実行される多くのアプリケーションが存在します。私はこの構造を作成しましたTypeScript 1.8のモジュールの相対的なモジュール名の解像度がRequireJS 2.1のAMDスタイルモジュール

モデルは生成されたコードであり、.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の依存性のためにオプションの名前を渡すことができ
関連する問題