
У вас возникли проблемы с уменьшением 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% больше, чем пакет с трассировкой зависимостей.
Действительно заставляет задуматься, что они грузят, а?
Выводы
Немного отслеживая зависимости и оптимизируя, мы можем уменьшить размер распределенных и развернутых пакетов, что сэкономит время и место.
Это может даже вытащить вас (или отсрочить) неприятную ситуацию, например. размерные квоты.
Если это было полезно, пожалуйста, найдите несколько секунд, чтобы поаплодировать 👏🏻 — это не дорого, но будет полезно для других, которые столкнулись с такой же неприятной проблемой в своих хобби или сфере деятельности.
Ваше здоровье!