我已經在我的package.json文件如下:Browserify墊片似乎沒有繫繩連接到窗口對象
"browserify": {
"transform": [
"browserify-shim"
]
},
"browser": {
"jquery": "./node_modules/jquery/dist/jquery.js",
"tether": "./node_modules/tether/dist/tether.js"
},
"browserify-shim": {
"jquery": "$",
"tether": "Tether"
}
然後這個在我的JS模塊之一:
const $ = require('jquery');
const Tether = require('tether');
然後我得到以下錯誤在瀏覽器中:
tether.min.js:1 Uncaught TypeError: Cannot set property 'Tether' of undefined
但是,如果我不嘗試墊片繫繩,只需使用window.Tether
在需要它的模塊,它工作正常。
const $ = require('jquery');
window.Tether = require('tether');
有沒有人知道爲什麼browserify-shim不適用於Tether這種方式?
順便說一句,你不需要爲這兩個文件中的任何一個使用'browser'指令,因爲路徑是由它們各自的'package.json'文件中的'main'指令設置的。 – YPCrumble
是的,我知道我可以直接從node_modules(通過他們自己的包文件,如你所說)來要求他們。我之所以使用這個墊片是因爲我認爲這讓他們看到了全球的「窗口」。 – davidpauljunior
'browser'指令僅用於提供別名來覆蓋Browserify使用的文件,請參閱https://github.com/substack/node-browserify#browser-field,這是Browserify內核的一部分。我認爲如果你希望在全球範圍內爲你的其他應用程序提供'Tether',你使用'window.Tether'的方法是正確的。另一種選擇是通過CDN拉動Tether,如果可用,並使用['global'](https://github.com/thlorenz/browserify-shim#a-expose-global-variables-via-global)設置從現有的「窗口」而不是重新將代碼合併到你的包中。 – YPCrumble