Структура пакета NPM

preview_player
Показать описание
Рекомендации по теме
Комментарии
Автор

Хотел оставить небольшой ехидный комментарий, а получилась целая рецензия :) Будет полезно новичкам.

Вообще, есть обратная сторона медали зависимостей. Когда ставишь, скажем, babel, они у себя использует довольно большое количество модулей, каждый из которых тоже имеет зависимости, каждый из которых... Ну, вы поняли. И это дерево может распространяться сколь угодно глубоко. И тот же babel, установленный в windows, так просто не удалить, потому что система не поддерживает такие длинные имена файлов. Надо перенести слишком глубокие файлы на несколько уровней выше, а затем уже удалять.

И таким образом директория Node_modules разрастается на десятки тысяч файлов. Для сборщика, который использует gulp, webpack, babel, jade и stylus загружается около 120 000 файлов и занимает это хозяйство 300-400 мб на диске. Серьёзно, это всего лишь сборщик! Там даже тестов нет! А если ставить karma, mocha, что, я полдиска займу этими микрофайлами?)

А если у меня 10 таких проектов? (на самом деле, за 3 года работы гораздо больше) Конечно, я могу поставить node_modules на уровень выше, скажете вы, но! Пока я закончу один проект, модули обновятся, в следующем проекте я буду использовать более новые их версии, скорее всего. И в каждом будет примерно одинаковый сборщик на gulp с копией всех своих зависимостей. В общем, это самый настоящий файловый кошмар.

А если это не babel, а, скажем, Three.js?! У него 30к коммитов в репозитории, 15 МЕГАБАЙТ исходников, имеет у себя около 2000 файлов и вообще, сам по себе он устанавливается минуты две. А есть ещё a-frame, который использует Three.js. Вуаля, у меня два three.js в проекте! (на самом деле, нет, ведь после a-frame three.js ставить не обязательно, он используется внутри и выводится в глобальную область видимости, но всё равно!)

Кстати, про Three.js: все эти мегабайты и тысячи файлов на самом деле не исходники, а примеры и они указаны в ignore, так что de jure эти файлы не попадают в файловую систему и не записываются на диск, но по факту npm всё равно обязан скачать весь пакет и только потом отфильтровать ненужные файлы. А трафик-то идёт!

Как искать выход из ситуации с такой архитектурой, я не знаю :))

ЗЫ.: Конечно, теперь npm немного изменил свою политику установки зависимостей. Теперь какие-то общие модули (или самые свежие, я пока так и не понял) устанавливаются в каталог проекта, а если другие модули используют те же зависимости, то заново они не скачиваются и не устанавливаются, а используются уже установленные. Но! Всё же, если версия не самая свежая, то устанавливается по-старому. Так что проблема решена лишь частично.

Disorrder
Автор

Пытался повторять действия, возникли проблемы (win7):
В своем пакете my_chat в .json прописал как в видео на 5:20-530: ..."dependencies": { "express" : "3" }..., но nmp установил все в my_chat/node_modules (создал там десятки папок, в т.ч. my_chat/node_modules/express), а не в my_chat/express/node_modules.
Кроме этого после "nmp i my_chat" я мог найти свой модуль на сайте, а также мог установить его в произвольную папку с помощью "npm i my_chat", НО я не мог найти его с помощью "npm s mt_chat".

kxefgmx
Автор

CONTENTS
0:00 заглядываем внутрь пакета
0:40 поля name, description, version
2:47 установка пакета с github
3:17 установка скачанного пакета
3:36 поля author, contributors, dependencies
4:37 номер версии в dependencies
5:32 поле devDependencies
6:30 поля keywords, repository, main, scripts
7:55 заключение

kostyaji
Автор

Прошу прощения за опечатки в предыдущем комментарии. "npm s my_chat" ничего не находило (сейчас и не найдет, т.к. я сделал unpublish пакета, чтобы не засорять репозиторий).

kxefgmx
Автор

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

materna
Автор

Express поставил свои модули в общую node_ modules, это нормально?

DemiGoodUA
Автор

Кажется автор не упомянул о том, как обновлять версии своих модулей, опубликованных на NPM... Подскажите, пожалуйста, кто-нибудь, как это делается...а то в знании остался пробел.

SergeyTish