Есть ли способ очистить каталог node_modules, оставив только необходимые зависимые файлы?

Установка и управление пакетами с использованием npm - это прекрасно! То, что я не нахожу настолько великим, это беспорядок, который он может оставить.

Я начал использовать npm для управления зависимостями как клиентов, так и узлов, и заметил множество различных механизмов для различных пакетов, на которые я полагаюсь. У некоторых есть lib папки, некоторые имеют src папки, некоторые dist, немного docs, немного examples И т.д. Я понимаю, что это потому, что, как правило, эти пакеты приходят непосредственно из источника.

Мой вопрос:

Есть ли способ идентификации или даже автоматизации удаления ненужных файлов для развертывания в рабочей среде? Я думаю: удаление любого readme.md (достаточно легко, я думаю) или файлов примеров (возможно, достаточно легко).

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

РЕДАКТИРОВАТЬ:

Как отметил Александр Мак (ниже), хорошая стратегия для front-end dep - включить клиентские зависимости как dev-зависимости и сборки. Так что мой вопрос касается только приложений nodejs.

2 ответа

Я мог бы предложить собрать ваш код (и deps) в один пакет с rollup.js или webpack2.

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

Вы можете запустить: npm prune который удалит модули из./node_modules, не указанных как зависимости в packages.json.

npm dedupe удалит дублирующиеся зависимости, потянув эквивалентные модули до корня./node_modules/. Я не знаю, насколько это полезно. Я сделал это, а затем понял, что существует целая куча модулей, которые я использовал косвенно, которые я также мог использовать напрямую, так что вот так.

Безошибочный способ сделать это также:

rm -rf ./node_modules ./bower_components npm install

В любом случае, рекомендуется делать чистую сборку перед выпуском в производство.

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

Другие вопросы по тегам