Сжатие node_modules для развертывания на стороне клиента

Я реализую клиентское приложение на JavaScript, используя Node.js. Поскольку я буду развертывать программное обеспечение на многих машинах, я хотел бы свести к минимуму размер распространяемого пакета. В частности, я хотел бы удалить все ненужные файлы из node_modules.

Для начала это означает дедупликацию и обрезку дерева зависимостей, что npm может сделать за меня. Но я также хотел бы удалить все файлы package.json и (особенно) любые другие файлы, которые не нужны для развертывания. Во многих пакетах, которые я использую, есть множество тестов, несколько версий файлов (минифицированных, браузерных и т. д.) и тому подобное. Мне просто нужны файлы JavaScript, которые фактически используются работающим приложением. В противном случае я буду распространять несколько 100Кб файлов, которые на самом деле не используются.

Я знаю о node-browserify, но мое приложение будет работать в среде CommonJS, а не в браузере, поэтому я хотел бы хранить модули отдельно и загружать их с помощью require.

Я думаю о написании плагина для Grunt, который обходит дерево зависимостей, используя required, извлекает JavaScript файлы, необходимые во время выполнения, и записывает их в древовидную структуру, чтобы их можно было загрузить с помощью require (просто загружая модули напрямую, без использования package.json). Но я хотел бы убедиться, что никто не сделал это для меня, прежде чем я возьмусь за это.


person Matthew Gertner    schedule 21.06.2013    source источник


Ответы (2)


grun-package-minifier не найден ( это не настоящий ответ. Я хотел ответить в ответе выше, но у меня еще нет достаточной репутации :().

npm install grunt-package-minifier --save-dev Пароль: npm WARN package.json [email protected] Нет поля репозитория. npm WARN package.json [email protected] Нет данных README npm ERR! 404 404 Не найдено: grunt-package-minifier npm ERR! 404 н/мин ОШИБКА! 404 'grunt-package-minifier' отсутствует в реестре npm.

person curious_guy    schedule 28.07.2014
comment
Вероятно, я не добавлял его в NPM, но он доступен на Github по ссылке в моем ответе. - person Matthew Gertner; 29.07.2014

FWIW: grunt-package-minifier. Мой вариант использования немного необычен, так как мы разрабатываем фреймворк кросс-браузерного расширения. Подобно Browserify и в отличие от стандартных развертываний NodeJS, мы хотим минимизировать размер нашего дистрибутива, включая любые модули CommonJS. . Но в отличие от Browserify мы поддерживаем CommonJS, поэтому мы можем сохранить структуру модуля, а не объединять все в один большой файл.

По сути, я удаляю все package.json, README, тестовые файлы и т. д. из node_modules, но сохраняю основные файлы JavaScript в структуре, которую может использовать загрузчик модулей CommonJS.

person Matthew Gertner    schedule 01.07.2013