2015-04-26 13 views
6

Próbuję użyć bootstrap-daterangepicker z pakietem Webpack. W moim pliku widoku mam następujące:Wystawianie wtyczki jquery za pomocą pakietu Webpack

define(function (require) { 
    require('bootstrap-daterangepicker'); 

    $('#daterangepicker').daterangepicker({ ... }); 
}); 

I webpack.config.js:

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

Wynika to w daterangepicker is not a function. Przyjrzałem się daterangepicker.js i wygląda na to, że $.fn.daterangepicker nie został poprawnie wyeksportowany. Jak to zrobić? Próbowałem użyć imports-loader, aby wymusić importowanie jQuery, ale to nie pomogło.

+1

Zauważ, że daterangepicker ma taką linię '= jQuery ('wymagają jQuery');'. Mam wrażenie, że może wiązać wtyczkę do niewłaściwego wystąpienia jQuery z tego powodu. Jeśli nie rozpakujesz jQuery, powinieneś skonfigurować [zewnętrzne] (https://webpack.github.io/docs/configuration.html#externals). –

+0

Jak korzystać z "externals"? Myślałem coś w rodzaju 'externals: {'bootstrap-daterangepicker': '$'}', ale to nie działa niestety. – spacek33z

+0

Jeśli masz tylko 'externals: {jquery: true}' potraktuje jQuery jako zewnętrzny i nie będzie go zawierał. W takim przypadku twój datepicker połączy go ze światem przez jego wygląd. –

Odpowiedz

15

Podobno bootstrap-daterangepicker próbuje załadować własny jQuery. Dlatego $.fn.daterangepicker nie jest dostępny w 'my' jQuery. Byłem zmuszony bootstrap-daterangepicker zawierać mój jQuery z tej linii w webpack.config.js:

resolve: { 
    alias: { 
     'jquery': require.resolve('jquery'), 
    } 
} 
+0

Rozwiązało to również mój problem z 'devbridge-autocomplete', dzięki – Nate

0

Opcja WebPack „resolve” mi nie pomóc, ale @ spacek33z komentarze doprowadzić mnie do uświadomienia sobie, że moja kątowa komponent związanej element nie był elementem jQuery, ale zwykłym elementem DOM. Powodem, dla którego Angular używał własnego jqLite w porównaniu do prawdziwego jQuery.

Wyszukiwanie, dlaczego Angular nie znalazł prawdziwej jQuery Znalazłem pytanie "Webpack: how to make angular auto-detect jQuery and use it as angular.element instead of jqLite?", które pomogło mi zrealizować potrzeby kątowe window.jQuery.

Więc to wydaje się być właściwa webpack.conf.js zaklęcie dla mnie:

new webpack.ProvidePlugin({ 
     'jQuery': 'jquery', 
    'window.jQuery': 'jquery', 
     'jquery': 'jquery', 
    'window.jquery': 'jquery', 
     '$'  : 'jquery', 
    'window.$'  : 'jquery' 
}), 
Powiązane problemy