Подтвердить что ты не робот

Browserify FullCalendar с внешним jQuery

Я загружаю jQuery из CDN, и эта ошибка возникает, когда я пытаюсь импортировать FullCalendar в мои скрипты:

Неиспользуемая ошибка: не удается найти модуль "jquery"

Вот мой script:

'use strict'

import $ from 'jquery'
import 'fullcalendar'

$('#calendar').fullCalendar()

Я запускаю эту команду для преобразования моего script:

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

Мой HTML выглядит так:

<!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>

Я также пробовал browserify-shim с помощью depends: ['jquery', 'moment'], но это не имеет никакого значения.

Я подозреваю, что это потому, что в файле FullCalendar JS есть оболочка UMD, которая делает свои собственные require('jquery') и require('moment'), но я думал, что внешний флаг будет достаточно умным, чтобы обнаружить это.

В любом случае я могу обойти эту проблему?

Обновление. Это был минимальный пример того, чего я пытаюсь достичь, однако мой фактический код включает в себя гораздо больше зависимостей, чем FullCalendar, и все зависимые от третьих сторон объединяются в файл vendor.min.js, отделенный от нашего кода (например, как index.js).

4b9b3361

Ответ 1

Мне удалось заставить его работать, изменив require('jquery') в fullcalendar factory на $.

Кроме того, не нужно использовать import $ from 'jquery' в вашем файле index.js. Это уже зависимость от fullcalendar npm.

После запуска

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

Отредактируйте файл index.min.js в функции fullcalendar factory, где он читает:

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

в

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

В качестве альтернативы вы можете сделать это редактирование непосредственно в файле node_modules/fullcalendar/dist/fullcalendar.js.

Надеюсь, это поможет!