#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
Его автономный режим может добавлять зависимости вашего проекта в ваш 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
возможно, также получили дополнительную поддержку в этих областях.