2013-12-21 1 views
7

Как бы я пошел об очистке папки node_modules при подготовке моего кода для развертывания.Как очистить папку node_modules при подготовке к развертыванию

Я делаю приложение с использованием node-webkit и предпочел бы включать наименьшее количество файлов при объединении окончательной версии приложения, поскольку процесс распаковки занимает некоторое время.

Я посмотрел на npm dedupe и использовать npm install --production, чтобы избавиться от дубликатов и получать только производственные файлы, но я до сих пор остается Readme файлов, benchmarks, tests и build файлы, которые мне не нужны.

То, что я хотел бы в конечном итоге с каждого модуля в папке node_modules является LICENSE файл, если он существует, то package.json и все остальное, что мне нужно для модуля запуска, но больше ничего.

Вопрос: How to automatically clean a node_modules directory for a SCM commit заголовок несколько в том же направлении, но речь идет о том, чтобы сделать так, чтобы на самом деле не то, что я ищу.

Вопрос: NPM clean modules снова был несколько таким же, как мой, но не совсем полностью.

This ответ помогает, поскольку более эффективная версия для dedupe для связывания окончательного приложения.

Update
Я попробовал пользовательский модуль, связанный с here, но это, похоже, не правильно работать, даже после того, как некоторые пустячный о.

Со всем этим сказанным я еще не нашел правильного ответа.


Вот пример того, что я ищу.

В моем проекте у меня в настоящее время есть две зависимости: socket.io и socket.io-client.

Вместе они составляют 15 MB с файлов в папок.

Ручная чистка readme, makefile, VC++ файлы сборки, такие как .pdb и .obj и других ненужных файлов, я был в состоянии уменьшить его до 2,74 MB с файлов в папок.
Это всего лишь два модуля.

Я хотел бы узнать, есть ли способ сделать это автоматически, желательно с npm.

+0

Вы можете написать '.bat | .sh', чтобы автоматизировать ваш release.etc .. но скоро вы просто закончите использование 'grunt' – Gntem

+0

. Я открыт для создания задачи grunt, но мне интересно, есть ли у вас подходящий способ ... –

+0

You может сделать вашу собственную проверку зависимостей, если она еще не существует. – Ariaan

ответ

2

Ну очистки node_modules для развертывания для приложения WebKit, его рода трудно, из-модулей внутри node_modules каталога установлены с или без тестовых файлов других MISC файлов и т.д., если владелец модуля, заявил файл .npmignore с файлами/файлами, такими как tests или examples, они будут исключены из процесса упаковки, когда владелец издает свой модуль, но он будет существовать в репозитории (git), как обычно.

Exclude test code in npm package?

выше остается в руках владельцев модуля, если он/она «забывает», чтобы сделать один, то пакет будет содержать почти все.


Обратите внимание, что, так как вы не используете development пакет socket.io или socket.io-client это не означает, что вы должны npm install socket.io --save-dev, простой npm install socket.io -V будет установить пакет производства, как он был загружен его владельцем.
Возможным обходным решением было бы сделать задачу grunt, чтобы очистить весь ваш node_modules так, как вы бы хотели.

несколько правил будет

  • test или tests каталог или *test*.js файлы
  • build каталоги (не уверен, он может содержать некоторые бинарные файлы иногда, которые необходимы)
  • history.md

GruntJS


Надеюсь, я как-то помог, также взгляните на Tilemill и как они разворачивают свое приложение.

1

Модули, установленные с NPM, не должны содержать файлы разработки (например, тесты, тесты и т. Д.). Если они включены, вы должны связаться с разработчиком модуля и попросить добавить их в .npmignore.

Примечание: файлы разработки в этом случае означают файлы, необходимые для разработки реального модуля, а не вашего приложения.

Это было предложено раньше, но задача deploy в grunt, вероятно, хорошая идея. Просто убедитесь, что test приложение после очистки. grunt-contrib-clean отлично подходит для чистки.

См. .npmignore от connect за некоторые идеи относительно того, какие файлы/каталоги не должны находиться в производственном пакете.

-1

Я думаю, что вы ищете npm prune

НПМ чернослив [<name> [<name ...]]

Эта команда удаляет "лишние" пакеты. Если указано имя пакета , то удаляются только пакеты, соответствующие одному из предоставленных имен: .

Внешние пакеты - это пакеты, которые не указаны в родительском списке зависимостей пакета .

Документация https://docs.npmjs.com/cli/prune

+0

'npm prune' удаляет только пакеты в node_modules, которых нет в package.json, он не« очищает »их – aluxian

5

Этот модуль пытается интеллигентно очистки папки node_modules:

modclean

Установка:

npm install modclean -g 

или

npm install modclean --save-dev 

Использование:

modclean 

Он использует набор шаблонов по умолчанию для удаления ненужных наворотов из модулей по всему дереву зависимостей.

1

Возможно, вас интересует эта небольшая команда find, которую я собрал с течением времени. Имейте в виду, что это не «одноразовое решение»! Вам нужно тщательно проверить его в соответствии с вашими требованиями. Он предназначен для окружения node.js и, безусловно, уничтожит среды браузера. Я запускаю сценарий bash как сценарий postinstall в npm.

НЕ ПРОПУСТИТЬ КОПИРОВАТЬ 'N PASTE. Вы были предупреждены!

find node_modules \(\(-name "dist" -or -name "ts" -or -name "logos" -or -name "min" -or -name "test*" -or -name "doc*" -or -name "tst" -or -name "example*" -or -name "build" -or -name "man" -or -name "benchmark*" \) -and -type d \) -or \ 
    \(\(-iname "readme*" -or -iname "changelog*" -or -iname "notice*" -or -iname "test*.js" -or -iname "*.min.js" \) -and -type f \) -or \ 
    \(-path "*moment-timezone/data/unpacked*" -and -type d \) 

Чтобы быть уверенным, что я не добавил последнюю строку | xargs rm -rf. Вы можете безопасно выполнить приведенную выше команду без удаления чего-либо, а затем добавить трубку в xargs с rm, чтобы это произошло.

Что делает команда find? Я объясню шаблон по шаблону.

  1. \(\(-name "dist" -or -name "ts" -or -name "logos" -or -name "min" -or -name "test*" -or -name "doc*" -or -name "tst" -or -name "example*" -or -name "build" -or -name "man" -or -name "benchmark*" \) -and -type d \) => поиск каталогов, которые соответствуют по тексту в кавычках. * - это шаблон.

  2. \(\(-iname "readme*" -or -iname "changelog*" -or -iname "notice*" -or -iname "test*.js" -or -iname "*.min.js" \) -and -type f \) => поиск файлов в любой папке, где текст в кавычках совпадает независимо от случая. Особенно шаблон "*.min.js" может быть опасным для некоторых людей.

  3. \(-path "*moment-timezone/data/unpacked*" -and -type d \) => удалить неупакованные данные с момента. Это также экономит много места.

Не стесняйтесь улучшать это!

0

Я изучал это для развертывания в эластичном шланге AWS. Когда я запускаю команду eb deploy, она волшебным образом находила файлы для загрузки и не получала ни одного из bower_components или node_modules. Интересно, как.

Оказалось, что eb deploy вызывает git archive под капотом. git archive проверяет указанную ветку и делает zip всех файлов.

Предположительно, вы не совершаете такие вещи, как ваши каталоги node_modules или bower_components, чтобы git, так что git archive может быть решением вашей проблемы. Если вы хотите избежать таких вещей, как тестовые примеры и файлы README, и так далее, вам все равно придется делать некоторые тегирования в git. Но вы начинаете с значительно меньшего списка, и вы явно исключаете основную часть материала, который хотите исключить.

Смежные вопросы