Подтвердить что ты не робот

Как работает установка npm

Я использую Node.js(через browserify) для каждого из моих веб-приложений, все из которых имеют некоторые общие зависимости и другие, специфичные для себя, Каждое из этих приложений имеет файл package.json, который указывает, какие версии этих модулей ему нужны.

В настоящее время у меня есть каталог /node_modules в родительской папке моих приложений для модулей, которые все они должны ссылаться, а затем я добавляю определенные приложения в папку node_modules в этом каталоге приложения. Это прекрасно работает в краткосрочной перспективе, так как мои операторы require() могут продолжать смотреть вверх в файловой структуре, пока не найдут каталог node_modules с правильным приложением в нем.

Если это становится сложно, когда я хочу вернуться к старому проекту и запустить npm install, чтобы убедиться, что он все еще может найти все необходимые ему зависимости. (Кто знает, какой смешной бизнес произошел с тех пор на уровне родительского каталога.) У меня создалось впечатление, что npm install сделал это:

  • для каждого модуля, указанного в package.json, сначала проверьте, присутствует ли он, перемещение каталога таким же образом require. Если это не так, установите его в локальный каталог node_modules (при необходимости создав этот каталог).

Однако, когда я запускаю npm install внутри папки приложения, он должен установить все локально, независимо от того, где еще он может существовать. Это правильное поведение? (Возможно, есть еще одна причина, например, язык плохой версии в моем package.json). Если это правильное поведение, есть ли у меня способ npm install вести себя как выше?

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

4b9b3361

Ответ 1

Однако, когда я запускаю npm-установку внутри папки приложения, она, как представляется, устанавливает все локально, независимо от того, где еще может существовать восходящий поток. Это правильное поведение? (Возможно, есть еще одна причина, например, язык плохой версии в моем пакете. Json). Если это правильное поведение, есть ли способ, чтобы я установил npm, как указано выше?

Да, это то, что делает npm install. В коде node.js алгоритм require имеет определенную последовательность мест, которые он просматривает, включая хождение по файловой системе. Однако npm install этого не делает. Он просто устанавливается на место. Алгоритмы, которые он использует, ограничены только одним каталогом node_modules в вашем текущем каталоге и не будут касаться ничего выше (за исключением -g).

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

Да, в основном ты делаешь это неправильно. Регулярный рабочий процесс хорошо масштабируется в Интернете. Для вашего случая использования он создает некоторую дополнительную утомительную работу, но вы также можете просто использовать семантическое управление версиями по назначению и указать "mylib": "^1.0.0" в своем пакете .json для своих приложений и быть в порядке с автоматическим получением новых версий в следующий раз, когда вы npm install.