Одновременная работа над приложением и зависимостью
Иногда вам нужно работать над кодом приложения и зависимостью одновременно. Возможно, вы являетесь автором зависимости, и у вас еще нет хорошего тестового покрытия. Приложение может служить сквозным тестом зависимости. Возможно, вам нужно отладить проблему в вашем приложении, и проблема, похоже, связана с источниками зависимостей.
Вы можете внести изменения в node_modules
и вручную скопировать изменения в git
репозиторий зависимости, как только вы закончите. Но есть более чистый подход: npm link
.
использование
Связывание пакетов - это двухэтапный процесс:
- Создайте глобальную символическую ссылку для зависимости с
npm link
. символическая ссылка, сокращение от symbolic link, - это ярлык, указывающий на другой каталог или файл в вашей системе. - Скажите приложению использовать глобальную символическую ссылку с
npm link some-dep
.
cd ~/projects/some-dep npm link # Step 1. cd ~/projects/my-app npm link some-dep # Step 2.
Вы можете редактировать, транспилировать, запускать тесты или фиксировать как обычно в some-dep
. Все это время my-app
работает с изменениями, внесенными вами в some-dep
. Символические ссылки являются локальными и не будут привязаны к git
. Когда вы будете готовы поделиться своим кодом, опубликуйте новую версию some-dep
или отправьте в ветку, указанную в my-app
’s package.json
:
cd ~/projects/my-app npm install — save some-dep@fhinkel/some-dep#experimental-branch
Отладка
Если вы используете VSCode и хотите установить точки останова в some-dep
, вам необходимо включить символические ссылки в отладчике для my-app
. Сделайте это, установив
“runtimeArgs”: [
“--preserve-symlinks”
]
in launch.json
.
Вернуться к нормальному
Как вернуться к нормальным зависимостям? Если вы больше не хотите использовать локальную версию some-dep
, удалите символическую ссылку. Но будьте осторожны, npm unlink
- это псевдоним для npm uninstall
, он не отражает поведение npm link
.
cd ~/projects/my-app npm uninstall --no-save some-dep && npm install
Вы можете очистить глобальную ссылку, но ее наличие не помешает my-app
.
cd ~/projects/some-dep npm uninstall # Delete global symlink
Заключение
Я использовал npm link
при работе над зависимостями клиентских библиотек для Google Cloud Platform. Все наши библиотеки используют модуль @google-cloud/common
. В некоторых случаях мне нужно было сразу увидеть изменения в более крупных библиотеках, а не изолированно в common
.
Освоение двухэтапного процесса npm link
- полезное дополнение к набору инструментов любого разработчика Node.js. Процесс состоит из выполнения npm link
в зависимости и npm link some-dep
в приложении.
Огромное спасибо Питеру Маршаллу и Александру Фенстеру за помощь в редактировании этого сообщения.