jQuery UI: Сборка из исходников

 Введение

Недавно понадобилось поставить только виджет datepicker из набора jQuery UI. Ранее для этого требовалось зайти на официальный сайт, выбрать галочками нужное и скачать итоговый пакет. Сейчас же сайт отдаёт ошибку 502:

Я даже подумал, что проект забросили и больше не поддерживают библиотеку. Но выход нашёлся. Если внимательно посмотреть сайт, то можно найти ссылку на репозиторий github. Там есть недавние коммиты - значит проект жив.

Сборка из исходников

Клонируем себе проект:

git clone https://github.com/jquery/jquery-ui.git

Далее перерыл сайт для разработчиков, искал в интернете, на их же github - как можно собрать из исходников именно то, что нужно (как это делается на сайте в Download Builder), а не весь гигантский набор виджетов и эффектов jQuery UI. Нигде ничего не нашёл, кроме указания верного пути в Stack Owerflow.

Переходим в каталог исходников и устанавливаем зависимости для сборки:

cd jquery-ui/
npm install
sudo apt install node-grunt-cli

Меняем файл сборки Gruntfile.js, чтобы собирался только виджет календаря и ничего больше. Блок requirejs меняем с

requirejs: {
    js: {
        options: {
            baseUrl: "./",
            paths: {
                jquery: "./external/jquery/jquery",
                external: "./external/"
           },
            preserveLicenseComments: false,
            optimize: "none",
            findNestedDependencies: true,
            skipModuleInsertion: true,
            exclude: [ "jquery" ],
            include: expandFiles( [ "ui/**/*.js", "!ui/core.js", "!ui/i18n/*" ] ),
            out: "dist/jquery-ui.js",
            wrap: {
                start: createBanner( uiFiles )
           }
       }
>   }
},

на

requirejs: {
    js: {
        options: {
            baseUrl: "./",
            paths: {
                jquery: "./external/jquery/jquery",
                external: "./external/"
           },
            preserveLicenseComments: false,
            optimize: "none",
            findNestedDependencies: true,
            skipModuleInsertion: true,
            exclude: [ "jquery" ],
            include: expandFiles( [ "ui/keycode.js", "ui/widgets/datepicker.js", "ui/i18n/datepicker-ru.js" ] ),
            out: "dist/jquery-datepicker-custom.js",             wrap: {                 start: createBanner( uiFiles )            }        } >    } },

Тут я выбрал keycode.js - т.к. его предлагает сборщик пакета на сайте Download Builder. Также указал нужный мне русский язык для календаря. Все возможные варианты, которые можно выбрать находятся в каталоге исходного кода проекта - смотрим названия пакетов, ищем нужное и через запятую указываем в списке. Я указал название файла, который в итоге будет собран - jquery-datepicker-custom.js. Можно указать любое название.

Когда всё подготовлено - запускаем сборку:

grunt default

В каталоге dist получаем желаемый файл JS.

Копируем  себе в проект и пользуемся календарём jQuery UI. Кроме JS файла, мне понадобились также стили:
jquery-ui/themes/base/datepicker.css

jquery-ui/themes/base/theme.css

В результате на сайте появится возможность загружать только виджет календаря (21 Kb - CSS; 83 Kb - JS) из большого набора JQuery UI. Файлы JS и CSS можно (и даже желательно) далее обработать (например с помощью terser и uglifycss) - так файлы получатся ещё компактнее.

Комментарии

Популярные сообщения из этого блога

Пропорциональное распределение суммы

Битрикс: своя геолокация

Битрикс: два способа отправить файл