Следите за зависимостями
Однажды обратил внимание, что у коллег размер проекта (the initial size of the app) перевалил за 10 Мб. Пятничным вечером, когда было скучно, решил посмотреть, в чём там дело, можно ли сделать что-то ощутимое небольшими усилиями.
В проекте практически нет медиафайлов, поэтому сразу смотрим на скрипты и видим монстра под названием vendor.js, который весит 9550 Кб, всё остальное значительно меньше. Для анализа содержимого воспользуемся инструментом webpack-bundle-analyzer
.
Обнаружил, что пакет xlsx
используется дважды. Идём в package-lock.json
. Один пакет используется самим проектом, указан в package.json
, версия у него 0.16.3. Второй пакет является зависимостью xlsx-parse-json
с версией 0.14.5. Дело в том, что у xlsx-parse-json
в зависимостях указан xlsx
версии ^0.14.1, а ^ на нулевых мажорных версиях работает как ~ для прочих, то есть ^0.14.1 это >= 0.14.1 < 0.15.0.
Хотел было предложить автору xlsx-parse-json
обновить зависимости или перенести xlsx
из dependencies
в peerDependencies
, вот только на Гитхабе он не был уже более полугода. А может, форкнуть проект? Смотрю, а весь код состоит из одного небольшого js-файла. Так рождается решение.
- Копируем этот файл себе в библиотеку, в сервисы.
- Переименовываем, меняем разрешение с js на ts, линтим, немного типизируем.
- Создаём класс с нужным публичным методом, добавляем
@Injectable
(у нас Ангуляр). - В
package.json
в зависимостях меняемxlsx-parse-json
наxlsx
. - В другом сервисе, который раньше использовал
xlsx-parse-json
, при помощи DI используем выше созданный класс. - Всё это в обязательном порядке проверяется на работоспособность, включая сравнение с тем, как это работало до момента, когда начали трогать код.
Итак, готова новая версия внутренней библиотеки, которая использует xlsx
, отдаём её нашему пациенту, который тоже использует xlsx
, смотрим на состояние. Анализируем package-lock.json
(или используем webpack-bundle-analyzer
), видим, что теперь этот пакет установлен в одном экземпляре.
Исходный размер проекта сократился более, чем на 10 %, с 10,59 Мб до 9,37 Мб.
Вывод простой: всегда следите за тем, что происходит с вашим проектом при добавлении любой зависимости, можно ли обойтись без неё, какие есть аналоги и т. д. И необязательно делать это вручную, при желании подобный мониторинг легко автоматизировать.
{{ 'Comments (%count%)' | trans {count:count} }}
{{ 'Comments are closed.' | trans }}