2016-11-05 3 views
2

Я пишу приложение для реагирования, которое будет жить внутри веб-страницы, которая уже содержит jquery. Это означает, что мне нужен глобальный доступ к jQuery во время разработки, но не хочу включать его в комплект для сборки (поскольку jquery уже существует на странице, где он развернут).Webpack сделать jQuery глобально доступным во время разработки

У меня возникли трудности с получением jquery как глобального (он же доступен из любого места через $ или window.jquery) для работы. В частности, мне нужен [email protected] Вот то, что я сделал до сих пор:

npm install [email protected] 

затем, в webpack.dev.config.js:

plugins: [ 
    new webpack.ProvidePlugin({ 
    $: "jquery", 
    jQuery: "jquery", 
    "window.jQuery": "jquery" 
    }) 
] 

... Однако, когда я бегу мой DEV сервер (webpack-dev-server) и попробуйте использовать jQuery в модуле, я получаю:

error '$' is not defined 

Любые идеи? мои главные цели:

  1. должен присутствовать во время сборки развития, но не в комплекте для производства

  2. должен быть глобально доступным из любого компонента с помощью объекта окна

  3. не должны явно быть импортируется в каждый модуль (предположим, что это глобальный)

+0

Вы уверены, что используете режим 'webpack.dev.config.js' в режиме dev? –

+0

@ MitchKarajohn Я. Мне интересно, если это связано с версией jquery, которую я использую? (1.7.2 против 2.x или 3.x). однако эта версия является req. – Prefix

+0

Hm, по-видимому [эта версия] (http://code.jquery.com/jquery-1.7.2.js) предоставляет объект jQuery' по умолчанию по умолчанию ('/ * Expose jQuery для глобального объекта */window.jQuery = window. $ = jQuery; '). Возможно, вам вообще не нужно использовать «ProvidePlugin», просто убедитесь, что вы загружаете библиотеку до остальной части вашего кода. Попробуйте это и опубликуйте результаты –

ответ

2

Проведя некоторое время на этом, вот мои наблюдения:

  • Установка [email protected], выдает следующее предупреждение: npm WARN deprecated [email protected]: Versions of the jquery npm package older than 1.9.0 are patched versions that don't work in web browsers. Please upgrade to >=1.11.0..

  • Попытка построить мои пакеты с использованием этой версии jquery полностью не удалась. Я не знаю, как ты это сделал, но для меня это не удается. Я использую [email protected]

  • Я проверил исходный код jquery, загруженный с npm install [email protected]. Он определенно изменен с original source. Оригинальный исходный код все еще существует, хотя под jquery/tmp/jquery.js

Заключение

Лучше всего для этого, чтобы работать, делая это, в какой-то момент до остальной части кода:

import 'jquery/tmp/jquery' ,

Таким образом, файл будет выполнен, jquery будет зарегистрирован window, как первоначально предполагалось, и вы можете использовать $ в остальной части кода.

+0

Большое вам спасибо. Это помогло мне. Спасибо за вашу помощь! – Prefix

+0

@Prefix рад, что мне удалось помочь. –

Смежные вопросы