2016-04-22 9 views
2

にテザーを添付していないようです私は、ブラウザで次のエラーを取得する:Browserifyシムは、私は私のpackage.jsonファイルに次のように持っているウィンドウオブジェクト

tether.min.js:1 Uncaught TypeError: Cannot set property 'Tether' of undefined

しかし、私はテザーをシムしようとばかりにwindow.Tetherを使用しない場合それを必要とするモジュール、それは正常に動作します。

const $ = require('jquery'); 
window.Tether = require('tether'); 

このようにbrowserify-shimがTetherで動作しない理由を知っている人はいますか?

+0

ちなみに、パスはそれぞれの 'package.json'ファイルの' main'ディレクティブによって設定されているので、 'browser'ディレクティブを使用する必要はありません。 – YPCrumble

+0

ええ、node_modulesから直接要求することができます(あなた自身のパッケージファイルを使って)。シムを使っていたのは、それをグローバルな「窓」にさらしたと思ったからです。 – davidpauljunior

+1

'browser'指示文は、Browserifyコアの一部であるBrowserifyが使用するファイルを上書きするエイリアスを提供するためのものです。https://github.com/substack/node-browserify#browser-fieldを参照してください。私はあなたのアプリケーションの残りの部分に 'Tether'を世界中で利用できるようにするために、あなたの' window.Tether'を使う方法が正しいと思います。もう一つの選択肢は、CDN経由でTetherを引っ張って、それが利用可能であれば、['global'](https://github.com/thlorenz/browserify-shim#a-expose-global-variables-via-global)の設定から引き出すことですあなたのバンドルにコードを再組み込むのではなく、既存の 'window'を使用します。 – YPCrumble

答えて

2

正しいですか。バンドルからwindowオブジェクトを手動で指定する必要があります。

私は100%わからないんだけど、私の理解は、それが

x exports window.$

を言うthis part of the documentationが、実際に$$としてバンドル内のすべてのモジュールに利用可能であることを意味していることである - これが意味するものではありませんあなたのwebappのwindowオブジェクト。

たとえばthis issueを参照してください。

問題は、オブジェクトがwindowの一部でなければならないと思われる部分のドキュメントにあります。その文言を変更するとよいでしょう。

+0

私は、ドキュメントが本当に「ウィンドウ」によって何を意味するかを明確にしていないことがわかりました。それはすべての問題の原因と思われます。私はモジュール内から自分の要求がウィンドウにアタッチされていることを示さないようにしたいと思う。これはおそらくどこかの設定で行うことができます。ありがとう! – davidpauljunior

+0

ええ - ちょうど[問題](https://github.com/thlorenz/browserify-shim/issues/210)を追加すると、その部分のドキュメントが改善されます。 – YPCrumble

関連する問題