2016-11-22 9 views
3

ブラウザとnodejの両方で使用できるライブラリを作成したいと思います。引数のためにのは、これが私のライブラリであるとしましょう:ブラウザとnodejで使用できるtypescriptライブラリの作成

export default class MyClass { 
    public getString(): string { 
     return "Message"; 
    } 
} 

ES2015モジュールは、現在のようなブラウザでサポートされていないと私はrequirejsまたは任意の他のモジュールローダブラウザに依存したくない - I scriptタグを使用して生成された.jsファイルを含めるだけで、このライブラリを消費したいと考えています。私が望むのは、内部モジュールを使うことで達成できると感じています(私はグローバル名前空間を汚染したくありません)。 しかし、コードをnamespace/moduleに書き込むと、commonjsモジュールとしてコンパイルするのが苦労しています。

私が欲しいものを達成する正しい方法は何ですか?あるいは、私はここでタイプスクリプトとjavascriptのnoobであることを完全に取り除いていますか?

+0

downvotesを説明してください。私がなぜ知っている限り、downvoteするのはいいです - 私は学びたいと思っています。 (jqueryは 'https:// www.npmjs.com/package/jquery'のようにしたいので、レールから完全に外れていないのでしょうか?) – Pawel

答えて

4

あなたが必要と思うのはUMDです。 tsconfig.jsonで含む

{ "compilerOptions": { "module": "umd" }, }

生成されたJavaScriptは、次のようになります。

(function (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(["require", "exports"], factory); } })(function (require, exports) { "use strict"; var MyClass = (function() { function MyClass() { } MyClass.prototype.getString = function() { return "Message"; }; return MyClass; }()); exports.__esModule = true; exports["default"] = MyClass; });

それはノード(CommonJS)ならびにブラウザ(CommonJS、AMD)で動作します。図書館のユーザーがscriptタグを含むようにするには、モジュールバンドラーWebpackBrowserifyまたはRollupのようにする必要があります。これらはグローバルエクスポートでUMD定義を生成するので、ライブラリのメインファイルのデフォルトエクスポートは、グローバルスコープ内の変数として利用できます。

+1

umdを試しましたが、webpack/browserifyで後処理しませんでした。私はそれを試してみましょう。 – Pawel

+0

browserifyのように見えますが、すべてのスクリプトのバンドルを作成できます。私は自分のライブラリーだけを「バンドル」したいと思います。 – Pawel

+0

"browserify"するファイルはありますか?あなたのライブラリーのエントリーポイントですよね? –

関連する問題