2016-06-06 3 views
35
import $ from 'jquery'; 
require("./node_modules/bootstrap/dist/css/bootstrap.min.css") 
require("./node_modules/bootstrap/js/dropdown.js") 
import React from 'react'; 
import ReactDOM from 'react-dom'; 
var _ = require('lodash'); 

Пожалуйста, обратитесь к моей настройке. Некоторые из причин я получил ошибку говоря "Uncaught ReferenceError: Jquery не определен() от dropdown.jsWebpack using bootstrap - jquery не определен

Я также включил следующие строки на webpack.config.js

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

Но, нет удачи -.? Тем не менее имея JQuery неопределенную ошибку Любая идея Может кто-то помочь этому вопросу, пожалуйста,

Большое спасибо

+0

https://github.com/AngularClass/angular-starter/issues/696 MurhafSousli хороший ответ – zloctb

ответ

80

пожалуйста, используйте WebPack ProviderPlugin, использовать глобальный не является хорошей идеей.

// webpack.config.js 
module.exports = { 
    ... 
    plugins: [ 
     new webpack.ProvidePlugin({ 
      $: "jquery", 
      jQuery: "jquery" 
     }) 
    ] 
}; 
+1

Спасибо. Просто спас меня от выполнения 'window.jQuery = require ('jquery')' – Marcel

+0

, пытаясь найти дополнительную информацию об этом. любой хороший блог? – Rohan

+2

Не загружает ли jquery всюду? Есть ли способ настроить jQuery только при выполнении 'import 'jquery''? –

16

Это будет работать

?!
global.jQuery = require('jquery'); 

вместо

import $ from 'jquery'; 
+0

Большое спасибо @bhargavponnapalli Просто w орки! –

+0

Это единственный способ заставить jQuery работать как зависимость для пользовательского интерфейса Kendo. Спасибо – mJay

+0

Не работал для меня. Один из них работал, хотя: http: // stackoverflow.com/a/39283602/541961 – Dmitriy

17

global.jQuery не работает для меня. Но я нашел интересное здесь: http://reactkungfu.com/2015/10/integrating-jquery-chosen-with-webpack-using-imports-loader/

Основная идея - использовать импорт-загрузчик webpacks. Обратите внимание, однако, что он не установлен по умолчанию, поэтому сначала установите (npm install --save import-loader). И в webpack.config добавить к вашим погрузчикам следующее:

{ test: /bootstrap.+\.(jsx|js)$/, loader: 'imports?jQuery=jquery,$=jquery,this=>window' } 

После этого только импорта JQuery и загрузчике, или некоторые другие плагины, простирающихся на «JQuery», как обычно.

С уважением

+2

Может подтвердить это работает w/bootstrap 3 – aphexddb

+3

Работы. Но мне пришлось установить загрузчик в «import-loader». Например: {test: /bootstrap.+\.(jsx|js)$/, loader: 'import-loader? JQuery = jquery, $ = jquery, this => window '} – Ramp

+1

Вы имели в виду ссылку на этот вопрос или что-то еще? –

3

Для того, чтобы этот код для работы вы должны RESTART Узел после изменения:

// webpack.config.js 
module.exports = { 
    ... 
    plugins: [ 
     new webpack.ProvidePlugin({ 
      $: "jquery", 
      jQuery: "jquery" 
     }) 
    ] 
}; 
3

Как отметил @Ro не забудьте перезапустить сервер узла, изменения к В противном случае веб-пакет не будет учитываться.

Я подтверждаю, что после добавления этих строк и перезапуска сервера ошибка исчезнет.

С Bootstrap 4 обновленная версия webpack.config.js будет выглядеть на самом деле, как это из-за своей зависимости с Tether:

plugins: [ 
// ...plugins... 
new webpack.ProvidePlugin({ 
    $: "jquery", 
    jQuery: 'jquery', 
    "window.jQuery": 'jquery', 
    tether: 'tether', 
    Tether: 'tether', 
    'window.Tether': 'tether', 
}), 
] 
0

это будет работать

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

Он работал я надеюсь, что это поможет

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