JavaScriptでモジュールを作成しており、ブラウザとサーバー(ノード付き)の両方で使用できます。それをモジュールと呼ぶことができます。そのモジュールは、という依存モジュールと呼ばれる別のモジュールのメソッドの恩恵を受けると言います。これらのモジュールの両方がla CommonJSスタイルà、ブラウザとサーバーの両方で使用されるように書かれていますパッケージ化ブラウザ/サーバCommonJSモジュール(依存関係あり)
module.js
if (typeof module !== 'undefined' && module.exports)
module.exports = Module; /* server */
else
this.Module = Module; /* browser */
dependancy.js
をif (typeof module !== 'undefined' && module.exports)
module.exports = Dependancy; /* server */
else
this.Dependancy = Dependancy; /* browser */
明らかに、従属性は、ブラウザですぐに使用できます。しかし、モジュールにvar dependancy = require('dependency');
というディレクティブが含まれていると、モジュールをメンテナンスするのが面倒になります。
私はこのように、私はモジュール内依存のためのグローバルなチェックを行うことができることを知っている:
var dependancy = this.Dependancy || require('dependancy');
しかし、それは私のモジュールは、ブラウザのインストール用の2つの追加要件有することを意味する:
を- ユーザーはdependency.jsファイルを
<script>
iとして含める必要がありますnはその文書 - およびユーザーは、このスクリプトは、これら二つの要件を追加すると、CommonJSのような気楽なモジュラーフレームワークのアイデアをスローmodule.js
前にロードされていることを確認する必要があります。
私のための他のオプションは、私がbrowserifyを使用してバンドルさdependency.js
と私のモジュールパッケージにおける第二、コンパイルされたスクリプトが含まれていることです。次に、ブラウザのスクリプトを使用しているユーザーにこのスクリプトを含めるように指示し、サーバー側のユーザーはpackage.json
に記載されているバンドルされていない入力スクリプトを使用します。これは最初の方法よりも好ましい方法ですが、ライブラリを変更するたびに(GitHubにアップロードする前など)実行しなければならないプリコンパイルプロセスが必要です。
私が考えていない他の方法はありますか?
これはひどい考えです。サーバーとブラウザはセキュリティ上の理由から同じライブラリを共有してはいけません。そのため、最初は両方を必要としています。あなたの依存関係の1つは、ユーザーの電子メールやパスワードなどを公開しています。悲惨なことだ。 – Val
@Valセキュリティに触れないサーバ側とブラウザ側の両方に使用できる多くの共通ライブラリがあります。ケースインポイント、[async](https://github.com/caolan/async)ライブラリ。さらに、この場合、** Module **と** Dependency **の両方が自分で作成されています。 – shennan