Npm совместно использует node_modules с правильным package.json

#javascript #node.js #npm

#javascript #node.js #npm

Вопрос:

У меня есть два проекта (в основном сервер и клиент), которые имеют очень похожие зависимости. Я хотел бы настроить общие зависимости удобным способом (не нужно вручную редактировать файлы, не нужно устанавливать все дважды, не нужно вносить потенциальные изменения дважды, а node_modules дублируется на 90%).

Похоже, это работает, поскольку nodejs разрешает в родительских папках, если модуль не был найден локально. Однако я до сих пор не нашел способа, при котором это поддерживалось бы NPM, чтобы правильно получать модули и автоматически добавлять их в соответствующие package.json (ы) (например, с помощью чего-то подобного npm i --save-dev module_name ). Мне нужно было бы вручную отредактировать package.json (ы), и, например, любой npm i из них нарушил бы работу системы.

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

Примерами совместно используемых модулей могут быть electron, electron-packager, typescript, … — в основном зависимости от разработчиков, которые всегда будут одинаковыми для обеих сторон. Я бы не хотел добавлять их глобально.

Комментарии:

1. Разве вы не подумали о решении с моно-репозиторием? Это определенно решит вашу проблему

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

Ответ №1:

Я, наверное, понимаю ваши потребности.
Я думаю, вам нужен npmpkgx

https://github.com/bitjerry/npmpkgx

Его автономный режим может добавлять зависимости вашего проекта в ваш package.json путем сопоставления глобальных модулей без установки модулей
Его онлайн-режим добавляет зависимости, требуемые проектом, в ваш package.json путем сопоставления реестра npm, также без установки модулей

Когда вам нужно установить, просто выполните npm install , чтобы автоматически установить все зависимости, добавленные в package.json с помощью npmpkgx, вместо ручного ввода имени модуля.

Установить

 $ npm install npmpkgx -g
  

Пример

 $ npmpkgx ./ --registry
The following packages have been added to the dependencies
{ 'npm-pkgs': '^2.0.1' }
The following packages are not added to the dependencies
{
  fs: '*',
  path: '*',
  https: '*',
  './cmd/command': '*',
  'npm-pkgxxx': '*'
}

$ npm install
...
  

Комментарии:

1. Я соглашусь с этим, чтобы закрыть здесь, но это довольно старый вопрос. Между тем, я прекратил использовать npm в пользу yarn , и их поддержка monorepo полностью решает эту проблему. Обратите внимание, что в то же время, npm возможно, также получили дополнительную поддержку в этих областях.