Как создавать новые проекты приложений, не загружая и не устанавливая модули npm снова и снова?

Я установил большинство модулей NPM глобально с -g

Однако я вижу, что всякий раз, когда я создаю новый проект приложения (например, проект angular) с помощью Yeoman, я вижу, что модули npm загружаются снова и устанавливаются в локальную папку node_modules.

Я считаю крайне расточительным скачивание и копирование одних и тех же модулей для каждого нового проекта. Размер каждого нового проекта составляет около 160 МБ.

Есть ли способ загрузить только модули локально в новом проекте, которые еще не доступны в глобальной папке npm node_modules? Скажем, все равно автоматически создавать символические ссылки из локальной папки node_modules на глобально установленные модули npm?

Это возможно? Как это настроить?


person muraliv    schedule 02.12.2014    source источник
comment
РЖУ НЕ МОГУ. То же самое здесь .... хотя я довольно опытен, этот npm (и maven в Java) действительно доставляет неудобства, время, потраченное на это, больше, чем разработка самого приложения.   -  person Phung D. An    schedule 05.03.2015
comment
Вы можете взглянуть на мой ответ на Исключение «Обнаружен цикл самореференции» на странице JSON.Net.   -  person Murat Yıldız    schedule 08.07.2018


Ответы (2)


Это на самом деле по дизайну. Из блога Node.js< /а>:

В общем, эмпирическое правило таково:

1. Если вы устанавливаете что-то, что хотите использовать в своей программе, используя require('whatever'), установите это локально, в корень вашего проекта.

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

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

Кроме того, у вас нет ничего необычного в том, что у вас есть проекты, которые полагаются на определенную версию npm, для которой вы, возможно, установили глобальное обновление, нарушая работу проекта, которому требовалась более старая версия. Изоляция является ключом к поддержанию работоспособности проектов.

если вам ДЕЙСТВИТЕЛЬНО нужно поддерживать только одну копию, вы можете использовать символические ссылки. npm link globalnpm

Установите его глобально, а затем npm link coffee-script или npm link express (если вы используете платформу, поддерживающую символические ссылки). Затем вам нужно только обновить глобальную копию, чтобы также обновить все символические ссылки.

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

person Claies    schedule 02.12.2014
comment
Также обратите внимание, что npm не загружает свежие копии модулей при каждой установке. Он поддерживает локальный кеш и копирует оттуда файлы. (Однако он проверяет реестр во время установки, чтобы проверить наличие обновленных версий. Это очень небольшой запрос.) - person josh3736; 03.12.2014

Существуют обходные пути, но это сделано намеренно, чтобы избежать эквивалента ада DLL или, в частности, несоответствия версий библиотек. К тому же 160 МБ — мизерная цена за такую ​​роскошь. Дискретные функционирующие пакеты гораздо приятнее поставлять как единицу качества — поверьте мне.

person Scott Stensland    schedule 02.12.2014