2016-12-07 5 views
0

私はAMDローダーとしてRequireJSを使用している仕事場でTypeScriptを使用しています。これはかなりうまく動作しています。私は活字体に私の個人的なJSライブラリの一部を変換したいと疑問に思って - それは使用可能です活字体のエクスポートするモジュールシステムに組み込まれグローバルAND必要が使用して定義 /エンドユーザーがあることを起こる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… } 

NOTグローバルを定義します。

エクスポートをすべて試して排除すると、グローバルにエクスポートされますが、もちろん定義されなくなります。ここのお手伝いが大変ありがとうございます。

答えて

1

これを行う唯一の方法はではなく、を使用するタイプスクリプトモジュールシステムです。

Typescriptコンパイラ自体が良い例です。lib/tsc.jsは、ノードモジュールとグローバルスクリプトの両方として使用できます。

彼らはそれを達成するために従わなければならないルールのない、よく知られている(私にとっては、少なくとも)セットがあります:

  • は、トップレベルでのexportimportを持っていません。彼らが持っているすべてのexportは1

  • namespace ts { }内のファイルは、各ファイルが namespace ts { }内のすべてのコンテンツを持っていることを提供し、他のファイルからシンボルを使用することができています。相互依存するすべてのファイルがまとめてコンパイルされていること、または適切な /// <referenceディレクティブがあることを確認する必要があります。これは、 --outFileオプションを使用して複数のタイプスクリプトファイルから単一の出力ファイルを生成することを前提としています。本質的には

は、名前空間ts内部のすべてと、すべてのファイルから構成さ1つの巨大なグローバル・スクリプトを作成しています。結果の出力には、トップレベルに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を使用して、あなたのモジュールに似た何かをする必要があります。私が知る限り、そのための組み込みのサポートはありません。

関連する問題