Разница между `npm link x` и`npm install /path/to/x`

Я думал, что я понял разницу между

npm link x

а также

npm install /local/path/to/x

Первоначально я думал, что первый создал символическую ссылку на x, тогда как последний установил отдельную копию x в вашем проекте вместо символической ссылки.

Тем не менее, я недавно заметил, что мое первоначальное впечатление было неправильным, и они оба, кажется, используют символические ссылки - так есть ли разница между ними и что это такое?

2 ответа

Решение

Таким образом, эта статья на самом деле, кажется, излагает это: 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 являются:

  1. Большая разница в том, что npm install /local/path/x будет запускать хуки preinstall/postinstall, но npm link x не буду.

  2. npm link использует глобальное пространство NPM, npm install /local/path/x не. Ссылка npm создает символическую ссылку на x в глобальном пространстве, а затем, когда вы вызываете ссылку npm x из y, она создает символическую ссылку не непосредственно на x, а скорее на глобальную символическую ссылку. Это важное отличие, если вы используете разные глобальные версии node.js, например, NVM.

  3. 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... это сделает свинью.

ссылка 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

Итак, подведем итог

  1. Создает символическую ссылку в глобальной папке (всегда)
  2. Это не меняет package.json
  3. Он устанавливает любую из отсутствующих зависимостей

установка npm

Сейчас npm install <folder> немного отличается от этого

  1. Это не создает символическую ссылку в глобальной папке
  2. Он изменяет и добавляет ссылку на package.json
  3. Создает символическую ссылку на оригинальную папку
Другие вопросы по тегам