Разница между `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
являются:
Большая разница в том, что
npm install /local/path/x
будет запускать хуки preinstall/postinstall, но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
... это сделает свинью.
ссылка npm
npm link
npm link <folder>
Обе команды выше создадут символическую ссылку <folder>
в глобальных пакетах.
Сейчас npm link <folder>
будет символическая ссылка то же самое в вашем node_modules
Папка также для вашего текущего проекта. И эти имена будут основаны на имени проекта в package.json
а не на основе имени папки, на которую вы ссылаетесь
package.json
вашего текущего проекта не будет затронут или изменен
Зависимости пакета по-прежнему будут установлены, как вы можете видеть в коде здесь
Итак, подведем итог
- Создает символическую ссылку в глобальной папке (всегда)
- Это не меняет package.json
- Он устанавливает любую из отсутствующих зависимостей
установка npm
Сейчас npm install <folder>
немного отличается от этого
- Это не создает символическую ссылку в глобальной папке
- Он изменяет и добавляет ссылку на package.json
- Создает символическую ссылку на оригинальную папку