2017-06-07 3 views
1

私が取り組んでいる小さなプロジェクト用のJavascript SDKを作成する必要があります。そうするために、私はTypeScriptプロジェクトを作成し、それを単一のJavascriptファイルにコンパイルすることを考えていたので、私のSDKのユーザーはそのファイルを自分のWebページに挿入するだけでした。TypeScriptプロジェクトを単一のJSファイルにコンパイルしてブラウザで使用できるようにする方法

しかし、私はimportを使用して単一のファイルにコンパイルしようとすると、SystemJSのみをサポートすることに気づきました。

TypeScriptプロジェクトを1つのJSファイルにコンパイルしてブラウザで使用できるようにするにはどうすればよいですか?ブラウザで使用できることで

、私は活字体でクラスAppを作成する場合は、その後、私はDEVコンソールでこれを行うことができることを意味する:

var x = new App(); 

私は今、1時間以上もこの時だった、と私が見つけたことは、これが不可能であることを示唆しているようです。


編集:Thisは本当に私の質問に答えていませありません。私がこの例で述べたように、私はType37プロジェクトにAppというクラスがある場合、同じ名前のブラウザに可視でなければならないので、私の開発コンソールにはvar x = new App()があります。 (または、ユーザーがSDKファイルを挿入した後に注入するJSファイルでこれを行うことができます)。その答えは、SystemJSでアウトファイルを作成する方法を伝えるだけです。

+0

可能な重複[活字体の単一のファイルにコンパイル](https://stackoverflow.com/questions/34474651/typescript-to-single-file) – toskv

+1

'app'は' this'、 'self'、' window'の初期値でグローバルに設定できます。 'App'を直接グローバルに定義することもできますが、TSは警告を出します。すなわち、 'App = class App {};' – Hydro

+1

だから、私が公開したいすべてのクラスに対してこれを行わなければならないだろうか?他にスケーラブルな方法はありませんか? – bk2dcradle

答えて

0

これはwebpackを使用できます。Node.JSのようなモジュールをバンドルしようとするNode.JSユーティリティです。 Webpackはモジュールをグローバルオブジェクトに自動的にはエクスポートしませんが、エントリモジュールなどの実行に使用されるNode.JSのデフォルトのrequireを置き換える関数を生成します(または生成しようとします)。グローバルオブジェクト内の各モジュール(または各モジュールのプロパティ)

(活字体では、CommonJSモジュールを使用しています。あなたが直接WebPACKのから活字体をコンパイルしますので第二に、WebPACKのとの間で、TS-ローダー・プラグインをインストールして使用。)

たぶんそれがためにWebPACKの2に適用されますたとえば、__webpack_require__関数を変更します。これは、グローバルオブジェクトの内部ではなく、したがって、あなたはfunction __webpack_require__で、WebPACKのの生成されたソースコードに干渉しなければなりません:

function __webpack_require__(moduleId) { 
    // [...] (After the `if (installedModules...) ...`) 
    /* 
    * You don't have access to the module name, so export each 
    * property to the browser's global object. 
    */ 
    var exports = module.exports; 
    for (var key in exports) 
     window[key] = exports[key]; 
} 
関連する問題