Разделяйте установку node_modules между подпроектами, сохраняя при этом отдельные файлы package.json.

У меня есть следующая структура папок:

project
├───components
│   ├───component-one
│   │       package.json
│   │
│   └───component-two
│       │   package.json
│       │
│       └───node_modules
├───node_modules
└───package.json

Корневая папка проекта project содержит package.json и предназначена для установки различных инфраструктурных модулей (например, Gulp, так как сборка централизована).

Каждый компонент в папке components в конечном итоге, после сборки и прочего, развертывается где-то для использования приложением - с использованием обычного npm install из папки или архива. По этой причине каждый компонент должен поддерживать свои собственные зависимости в своем собственном package.json.

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

В идеале я хотел бы:

  1. запустить, например, npm install -D <module> в папке component-one
  2. обновить package.json в этой папке с помощью <module>
  3. установить <module> в папку project

В некоторой степени этого можно достичь, запустив (в данном случае в Windows) mklink /D node_modules ..\..\node_modules из component-one для создания символической ссылки.

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

Есть ли решение npm через npm link или что-то, что я упустил?


person ZenMaster    schedule 23.01.2016    source источник
comment
На самом деле я хочу сделать то же самое, что вы пытались достичь здесь. Вы нашли решение с тех пор, как опубликовали это, или просто пошли другим путем? спасибо!   -  person Marc-Andre R.    schedule 28.09.2016
comment
@Марк-АндреР. У меня нет, к сожалению. При этом мы смотрим на Docker для разработчиков. env setup (вот о чем все это было - сократить время / проблемы установки, с часто используемыми вещами и его версиями).   -  person ZenMaster    schedule 28.09.2016
comment
Мы также используем vagrant/docker, чтобы упростить начальную настройку/проблему, но это не уменьшает размер проекта на диске. Нет, мы так заботимся об используемом пространстве, это больше вопрос предотвращения дублирования и обеспечения согласованности между зависимостями. В любом случае спасибо за ваш ответ, если я найду что-то в своем квесте, я буду держать вас в курсе! :)   -  person Marc-Andre R.    schedule 28.09.2016
comment
забыл скинуть ссылку на свой вопрос, вот, пожалуйста, на случай, если у меня есть ответы, которые могут вам пригодиться: stackoverflow.com/questions/39737024/   -  person Marc-Andre R.    schedule 28.09.2016