2016-01-29 16 views
24

wczytuję jQuery z CDN i ten błąd występuje, gdy próbuję zaimportować FullCalendar do moich skryptów:Browserify FullCalendar z jQuery zewnętrznego

Uncaught Error: Cannot find module 'jquery'

Oto mój skrypt:

'use strict' 

import $ from 'jquery' 
import 'fullcalendar' 

$('#calendar').fullCalendar() 

I m wykonywania tego polecenia, aby przekształcić mój skrypt:

browserify index.js -t babelify -x jquery > index.min.js 

Moje HTML wygląda następująco:

<!DOCTYPE html> 
<div id=calendar></div> 
<script src=https://code.jquery.com/jquery-2.2.0.min.js></script> 
<script src=index.min.js></script> 

Próbowałem również browserify-shim z depends: ['jquery', 'moment'] ale to nie robi żadnej różnicy.

Podejrzewam, że to dlatego, że plik FullCalendar JS ma owijkę UMD, który robi własny require('jquery') i require('moment') ale myślałem, że flaga zewnętrzna byłaby wystarczająco inteligentny, aby wykryć.

W jaki sposób mogę obejść ten problem?

Aktualizacja: To był minimalny przykład tego, co próbuję osiągnąć, jednak mój rzeczywisty kod wymaga wielu innych zależności niż FullCalendar, a wszystkie zależności od innych są łączone w jeden plik vendor.min.js, oddzielony od naszego kodu (np. index.js).

+0

Czy próbowałeś użyć [expose global] (https://github.com/thlorenz/browserify-shim#a-expose-global-variables-via-global) części browserify-shim? – zero298

+0

@ zero298 Biblioteka po prostu przywiązuje się do '$' bez ujawniania czegokolwiek, w co wierzę. Dostałem inne wtyczki jQuery do pomyślnej pracy z zewnętrzną jQuery (z lub bez podkładki), ale nie z jakiegoś powodu. –

+0

co się stanie, jeśli zmienisz skrypt na 'import $' zamiast 'import $ from 'jquery''? – Anthony

Odpowiedz

6

Udało mi się uruchomić go, zmieniając require('jquery') w fabryce fullcalendar na $.

Nie trzeba również używać import $ from 'jquery' w pliku index.js. To już zależność w pełnoprawnym npm.

Po uruchomieniu

browserify index.js -t babelify -x jquery > index.min.js 

edytować plik index.min.js w funkcji fabrycznego fullcalendar gdzie czytamy:

else if(typeof exports === 'object') { 
    module.exports = factory(require('jquery'), require('moment')); 
} 

do:

else if(typeof exports === 'object') { 
    module.exports = factory($, require('moment')); 
} 

Naprzemiennie, można wprowadź tę zmianę bezpośrednio w pliku node_modules/fullcalendar/dist/fullcalendar.js.

Mam nadzieję, że to pomoże!

+2

To nie jest całkiem realna opcja, ponieważ mój faktyczny przypadek użycia obejmuje łączenie wszystkich niezależnych zależności (z wyjątkiem jQuery) w ' Plik vendor.js, a także nierozsądne jest proszenie wszystkich członków zespołu o modyfikowanie pliku wewnątrz node_modules za każdym razem po instalacji. –

Powiązane problemy