У меня есть следующий в моем package.json файл:Browserify прокладка не кажется прикрепить Tether к объекту окна
"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
Однако, если я не пытаюсь Призонной шайба Tether и просто использовать window.Tether
в модуль, который его требует, он отлично работает.
const $ = require('jquery');
window.Tether = require('tether');
Кто-нибудь знает, почему браузер-прокладка не будет работать для Tether таким образом?
Кстати, вам не нужно использовать директиву 'browser' для любого из этих файлов, потому что путь устанавливается директивой' main' в соответствующих файлах 'package.json'. – YPCrumble
Да, я знал, что могу потребовать от них прямо из node_modules (через свои собственные файлы пакетов, как вы говорите). Причина, по которой я использовал прокладку для них, заключалась в том, что я думал, что разоблачил их в глобальном «окне». – davidpauljunior
Директива 'browser' предназначена только для предоставления псевдонима для переопределения файла Browserify, см. Https://github.com/substack/node-browserify#browser-field, это часть ядра Browserify. Я думаю, что ваш метод использования 'window.Tether' верен, если вы хотите, чтобы« Tether »был доступен для остальной части вашего приложения по всему миру. Другой вариант - вытащить Tether через CDN, если это доступно, и использовать параметр ['global'] (https://github.com/thlorenz/browserify-shim#a-expose-global-variables-via-global), чтобы извлечь из существующего «окна», а не повторного включения кода в ваш пакет. – YPCrumble