#javascript #jquery #jquery-plugins #requirejs #dependencies
#javascript #jquery #jquery-плагины #требуется js #зависимости
Вопрос:
Я пытаюсь создать «простой» jQuery
плагин, который зависит от других jQuery
плагинов (а также jQuery
от него самого, конечно).
после некоторого чтения и исследований я решил, что require.js
мог бы выполнить эту работу, но я не могу разобраться в 2 основных проблемах.
Допустим, myPlugin.js
зависит от 2 других плагинов jQuery:
bootstrap-datetimepicker.js
и select2.js
.
Хотя bootstrap-datetimepicker.js
зависит от moment.js
и bootstrap.js
и оба плагина, а также myPlugin.js
зависит от jQuery.js
1-я проблема:
Я хочу упростить вещи для людей, которые используют myPlugin.js
. я хочу просто предоставить им библиотеку и попросить их включить myPlugin.js
на страницу HTML.
Затем, вызвав плагин с чем-то вроде: $('#target').myPlugin();
,
myPlugin.js
выполнит все необходимые задания по внедрению зависимостей, а также фактическую работу этого плагина. чего я не могу понять, так это какой должна быть иерархия.
Я имею в виду, что если бы я использовал require.js
, мне нужно, чтобы он был включен на HTML-странице раньше myPlugin.js
, также мне нужно было бы управлять порядком загрузки зависимостей.
например, с bootstrap-datetimepicker.js
мне нужно сначала загрузить moment.js
, jquery.js
и bootstrap.js
.
итак, иерархия и сроки являются ключевыми проблемами моего 1-го выпуска здесь.
2-я проблема:
Как насчет дубликатов и конфликтов?
Может быть, человек, который хочет использовать, myPlugin.js
уже загружен jQuery.js
и bootstrap.js
, например.
Я не хочу загружать его снова и создавать дубликаты и конфликты на его / ее странице.
Ответ №1:
Ваш плагин должен использовать шаблон UMD, чтобы получить его зависимости способом, соответствующим среде, в которой он выполняется. Вам просто нужно обновить ветку для случая AMD, чтобы перечислить все зависимости и позволить RequireJS загружать их.
То, что вы распространяете, должно содержать только ваш плагин, и ваш код не должен пытаться загружать зависимости. В противном случае, я могу сказать вам по опыту, что люди, использующие загрузчики AMD (чтобы назвать только одну группу), будут проклинать ваше имя. Я не шучу, когда вы начинаете загружать скрипт через загрузчик AMD и вне него, это создает множество проблем, которые трудно решить. Задокументируйте, что ваш плагин ожидает быть доступным, и позвольте пользователям плагина настроить свою среду для предоставления необходимых модулей.
Если вы считаете, что сборка, содержащая зависимости, полезна для некоторых пользователей вашего плагина, тогда создайте дополнительную сборку, содержащую почти все. (Мне кажется, что jQuery, по крайней мере, также не должно быть в этой сборке.)