Предоставьте jQuery для реального объекта окна с помощью Webpack
Я не хочу подвергать объект jQuery глобальному объекту окна, который доступен внутри консоли разработчика в браузере. Теперь в моей конфигурации webpack у меня есть следующие строки:
plugins: [
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery'
})
]
эти строки добавляют определения jQuery к каждому файлу в моих модулях webpack.
Но когда я строю проект и пытаюсь получить доступ к jQuery в консоли разработчика, как это:
window.$;
window.jQuery;
Он говорит, что эти свойства не определены...
есть ли способ исправить это?
6 ответов:
вы должны использовать expose-loader.
npm install expose-loader --save-devвы можете либо сделать это, когда вам это нужно:
require("expose?$!jquery");или вы можете сделать это в ваш конфиг:
loaders: [ { test: require.resolve('jquery'), loader: 'expose?jQuery!expose?$' } ]обновление: начиная с webpack 2, вы должны использовать expose-loader вместо разоблачение:
module: { rules: [{ test: require.resolve('jquery'), use: [{ loader: 'expose-loader', options: '$' }] }] }
ProvidePlugin заменяет символ в другом источнике через соответствующий импорт, но не предоставляет символ в глобальном пространстве имен. Классический пример-Плагины jQuery. Большинство из них просто ожидают
jQueryдолжны быть определены глобально. С помощьюProvidePluginвы должны убедиться, что jQuery-это зависимость (например, загруженная ранее) и появлениеjQueryв их коде будет заменен на webpack raw эквивалентrequire('jquery').если у вас есть внешние скрипты, опираясь на символ, который будет находиться в глобальном пространстве имен( например, внешне размещенный JS, Javascript вызывает Selenium или просто обращается к символу в консоли браузера), вы хотите использовать
expose-loaderвместо.короче говоря: ProvidePlugin управляет зависимостями времени сборки для глобальных символов, тогда как
expose-loaderуправляет зависимостями времени выполнения от глобальных символов.
выглядит
windowобъект отображается во всех модулях.почему бы просто не импортировать/требуется
JQueryи поставить:window.$ = window.JQuery = JQuery;в вашем модуле точки входа?
это всегда работало для меня. в том числе и для webpack 3
window.$ = window.jQuery = require("jquery");
обновление для Webpack v2
установить expose-loader как описано Мэттом Дерриком:
npm install expose-loader --save-devзатем вставьте следующий фрагмент в свой
webpack.config.js:module.exports = { entry: { // ... }, output: { // ... }, module: { loaders: [ { test: require.resolve("jquery"), loader: "expose-loader?$!expose-loader?jQuery" } ] } };(от expose-loader docs)
Comments