6

ライブラリAとライブラリB、Aに応じてBを開発しています.browserifyを使用して、それらを個別にバンドルしたいので、ブラウザで次のことができます。

var A = require("A");
var B = require("B");

A のみに依存するライブラリ C も開発しているため、それらを個別にバンドルしたいと思います。A が B に含まれている場合、C からはアクセスできません。A が B と C にある場合、重複しました。

そこで、ライブラリ A のブラウザ化から始めます。

browserify -r ./src/A.js:A -o build/A.js

これはまったく問題なく動作します。私は A を配布でき、他の人はそれを使用してアプリケーションを開発できます。

次に、ライブラリ B を参照します。

browserify -r ./src/B.js:B -o build/B.js

しかし、今では A が 2 回あります。A はブラウザーに個別に読み込まれ、もう一度 B と一緒にパッケージ化されています。したがって、browserify の -i オプションを使用して、含まれないようにします。

browserify -r ./src/B.js -o build/B.js -i A

しかし、B が A を要求すると、ライブラリの代わりに空のオブジェクト {} が取得されます。ただし、ライブラリ A は、require("A") を実行することにより、グローバル スコープから引き続き利用できます。

-x を使用して外部化を試みましたが、グローバル スコープからライブラリを要求できなくなりました。

B の生成された出力をハッキングし、モジュールの解決を強制して以前の要求から A を取得することで、必要な動作を得ることができました。これにより、簡単な解決策があると思いますが、見つけることができません。

私はbrowserify 2.18.1を使用しています

4

1 に答える 1

1

それを見る2つの方法:

  • B は jquery-ui のように、A は jquery のように考えてください。jquery-ui を使用したい場合、jquery を DOM に含めるかどうかはユーザー次第です。したがって、B を構築している間は、A はまったく必要ありません。

  • B には A が組み込まれているという事実を文書化します。B を使用するユーザーは、A をまったく含めないでください。このシナリオでは、明らかに A を要求し、B を A と一緒にバンドルする必要があります。

  • 一般に、同じページにインポートされている共通部分を持つ 2 つのブラウザ化されたバンドルがある場合、バンドルの編成/依存関係、どのコンポーネントが何に含まれるかなどの問題にすでに陥っています。見直される/変更される

于 2014-10-03T16:55:56.250 に答える