私はSpineJS(commonjsモジュールをエクスポートする)を使用しており、どこでも使用するため、グローバルに使用できる必要がありますが、Spineを使用するすべてのファイルでSpine = require('spine')
を実行する必要があるようです。
Spine
を一度定義してグローバルに利用可能にする方法はありますか?
PS:私は例としてSpineを使用していますが、他のライブラリでこれを行う方法については一般的に疑問に思っています。
各ファイルにSpine = require('spine')
を記述するのが正しい方法です。
ただし、global
またはwindow
オブジェクトを使用することにより、いくつかの可能性があります(browserifyはglobal
オブジェクトをグローバル名前空間であるwindow
に設定します)。
global.Spine = module.exports
_global.Spine = require('spine')
window.Spine = require('spine')
まず第一に、あなたの例ではデビッドは正しいです。必要なすべてのモジュールにすべての依存関係を含めてください。非常に冗長ですが、あらゆる種類のアンチパターンと潜在的な将来の問題を軽減するコンパイル時の魔法はありません。
これは常に実用的ではありません。 Browserifyは、insertGlobalVars
というオプションを受け入れます。ビルド時に、提供されたキー名に一致する識別子について各ストリーミングファイルがスキャンされ、モジュール内で割り当てられていない各識別子を解決する引数を含むIIFEでモジュールをラップします。これはすべて、依存関係ツリーが完成する前に行われるため、requireを使用して依存関係を解決できます。
BrowserifyでinsertGlobalVars
オプションを使用します。
_browserify({
insertGlobalVars: {
spine: function(file, dir) {
return 'require("spine")';
}
}
});
_
スキャンされたすべてのファイルについて、割り当てられていない識別子spine
が存在する場合、require("spine")
として解決します。