Разница между "npm link x" и "npm install/path/to/x"
Я думал, что понимаю разницу между
npm link x
а также
npm install /local/path/to/x
Первоначально я думал, что первая создала символическую ссылку на x, в то время как последняя установила отдельную копию x в вашем проекте, а не символическую привязку.
Тем не менее, я недавно заметил, что мое первоначальное впечатление было неправильным, и оба они, похоже, используют символические ссылки - так есть ли разница между ними и что это такое?
Ответы
Ответ 1
Итак, эта статья, по-видимому, сама излагает ее: https://medium.com/@the1mills/how-to-test-your-npm-module-without-publishing-it-every-5-minutes-1c4cb4b369be
В нем говорится, что разница между npm link x
и npm install/local/path/to/x
:
-
Большая разница в том, что npm install/local/path/x
будет запускать preinstall/postinstall hooks, но npm link x
не будет.
-
npm link
использует глобальное пространство NPM, npm install/local/path/x
нет. Ссылка npm создает символическую ссылку на x в глобальном пространстве, а затем, когда вы вызываете npm-ссылку x из y, она создает символическую ссылку не непосредственно на x, а скорее на глобальную символическую ссылку. Это важные различия, если вы используете разные глобальные версии node.js, например NVM.
-
npm install/absolute/path/x
будет изменять package.json, npm link x
нет.
чтобы получить новую локальную копию вместо символической ссылки, используйте npm pack
, например:
tgz="$PWD/$(npm pack)"
cd <other project>
npm install "$tgz"
вы также можете использовать cp/rsync, но это не будет запускать установочные крючки или помещать исполняемые файлы в node_modules/.bin
..., которые будут делать свиньи.
Ответ 2
Ссылка на npm
npm link
npm link <folder>
Обе вышеупомянутая команда создаст символическую ссылку <folder>
в глобальных пакетах.
Теперь npm link <folder>
символизирует то же самое в папке node_modules
и для вашего текущего проекта. И эти имена будут основаны на имени проекта в package.json
и не будут основаны на имени папки, которую вы связываете
package.json
вашего текущего проекта не будет затронут или изменен
Зависимости пакета по-прежнему будут установлены, как вы можете видеть в коде здесь
https://github.com/nodejs/node/blob/31d5bdea70e44802918d6f4aa7c378bc1992be54/deps/npm/lib/link.js#L156
Итак, чтобы обобщить
- Он создает символическую ссылку в глобальной папке (всегда)
- Он не меняет package.json
- Он устанавливает любую из недостающих зависимостей
Установка npm
Теперь npm install <folder>
немного отличается от этого
- Он не создает символическую ссылку в глобальной папке
- Он изменяет и добавляет ссылку на package.json
- Он создает символическую ссылку на исходную папку