Разница между `npm link x` и` npm install / path / to / x` - PullRequest
0 голосов
/ 04 июня 2018

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

npm link x

и

npm install /local/path/to/x

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

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

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

npm link

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. Не изменяет пакет. json
  3. Устанавливает любую из отсутствующих зависимостей

npm install

Теперь npm install <folder> немного отличается от этого

  1. Он не создает символическую ссылку в глобальной папке
  2. Он изменяет и добавляет ссылку на пакет.json
  3. Создает символическую ссылку на исходную папку
0 голосов
/ 05 июня 2018

Статья Алекса Миллса об Medium обнажает ее.

В ней говорится, что разница между 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, но это не такзапустите install hooks или поместите исполняемые файлы в node_modules/.bin ... это будет работать.

...