У вас возникли проблемы с уменьшением node_modules до разумного размера?

Request must be smaller than 69905067 bytes for the UpdateFunctionCode operation

Сталкиваетесь ли вы с ограничениями по размеру даже при разделении зависимостей между несколькими zip-файлами?

Unzipped size must be smaller than 262144000 bytes

Столкнувшись с этой проблемой, я написал утилиту, которая как раз могла бы помочь. (Исходный код здесь)

Быстро и просто

Давайте избавимся от этого. Вероятно, это то, что вы ищете.

Требование: установить CLI для небольших модулей.

npm install --global smaller-modules

Вариант 1 — Создать пакет развертывания Lambda из обработчика

smaller-modules --zip --file handler.js --output-subdirectory . --output-path lambda.zip

Вариант 2 — Создать лямбда-слой из обработчика (расширенный)

smaller-modules --zip --file handler.js --output-path layer.zip

Сколько вы сэкономите

Чтобы проиллюстрировать, сколько места можно сэкономить, отправляя только зависимости, вот результаты запуска small_modules на самом себе.

До — Размер зависимостей small_modules = 102 МБ

smaller-modules % du -sh node_modules
102M    node_modules

Сама папка node_modules весит сто два мегабайта, что очень много для простой утилиты. Неудивительно, что более крупные и сложные приложения занимают так много места на диске, что приводит к проблемам с упаковкой и развертыванием, особенно в бессерверных средах.

К счастью, с небольшой трассировкой мы можем сделать намного лучше.

После — Размер пакета small_modules = 2,9 МБ

smaller-modules % smaller-modules --copy --file dist/index.js --output-subdirectory smaller_modules
smaller-modules % du -sh smaller_modules                                                           
2.9M    smaller_modules

Хочешь взглянуть на это? Это дает нам сокращение пространства на 97,2%, всего чуть менее трех мегабайт. Это легковес по сравнению с тем, что было раньше.

Примеры из реального мира

Базовое экспресс-приложение

% mkdir express-example && cd express-example
express-example % npx express-generator && npm install
express-example % du -sh node_modules
4.4M node_modules
express-example % smaller-modules --copy --file app.js --output-subdirectory smaller_modules
express-example % du -sh smaller_modules
1.5M smaller_modules

Даже с простым приложением Express.JS нам удалось сделать его на 34% меньше, чем раньше.

Базовое приложение React

% npx create-react-app react-example && cd react-example
express-example % du -sh node_modules
324M node_modules
express-example % smaller-modules --copy --directory src --output-subdirectory smaller_modules && cp -R src public smaller_modules
express-example % du -sh smaller_modules
48M smaller_modules

Хотя вы обычно используете Webpack для сборки и минимизации приложения React, small_modules может уменьшить node_modules всего до сорока восьми мегабайт, что означает, что исходный дистрибутив на 675% больше, чем пакет с трассировкой зависимостей.

Действительно заставляет задуматься, что они грузят, а?

Выводы

Немного отслеживая зависимости и оптимизируя, мы можем уменьшить размер распределенных и развернутых пакетов, что сэкономит время и место.

Это может даже вытащить вас (или отсрочить) неприятную ситуацию, например. размерные квоты.

Если это было полезно, пожалуйста, найдите несколько секунд, чтобы поаплодировать 👏🏻 — это не дорого, но будет полезно для других, которые столкнулись с такой же неприятной проблемой в своих хобби или сфере деятельности.

Ваше здоровье!