Как заставить пряжу переустановить пакет?

У моего проекта есть зависимость, которую я иногда получаю от сервера пакетов, а иногда получаю от локальной копии, которую у меня есть на моей машине. В результате, я часто должен иметь переключатель Пряжа, где он ищет зависимость. Кроме того, я часто меняю локальную копию зависимости и должен видеть, что изменения отражены в моем основном проекте. В результате мне нужно указать, чтобы пряжа продолжала искать то же местоположение для зависимости, но переустанавливать зависимость, пропускать кеш и захватывать ее непосредственно из своего текущего источника, даже если номер версии не изменился. (Иногда я хочу попробовать небольшие изменения в зависимости, и обновление номера версии каждый раз быстро станет раздражать.)

Как мне это сделать?

Я пробовал следующее, но никто из них не работает:

yarn remove dependency
yarn add file:/dependency

Продолжает использовать предыдущую версию зависимости.

yarn remove dependency
yarn cache clear
yarn add file:/dependency
yarn install --force

Также продолжает использовать предыдущую версию зависимости.

yarn remove dependency
rm -rf node_modules/
yarn cache clear
yarn add file:/dependency
yarn install --force

Все еще продолжает использовать предыдущую версию зависимости.

Как я могу гарантировать, что пряжа использует последнюю версию моей зависимости?

Ответ 1

Вы можете использовать команду yarn link. Это создаст вашу локальную зависимость, так что всякий раз, когда вы вносите изменения в зависимость, она сразу появляется в вашем основном проекте, если вам не нужно ничего делать, чтобы обновить его.

Если ваш основной проект находится в ~/programming/main а ваша зависимость находится в ~/programming/dependency и называется MyLocalDependency, вам нужно:

1) Запустите yarn link (без дополнительных флагов) из вашей зависимости:

cd ~/programming/dependency
yarn link

2) Запустите yarn link <name of dependency package> из основного проекта:

cd ~/programming/main
yarn link MyLocalDependency

И вы сделали!

Если вы хотите переключиться с локальной копии зависимости на другую, размещенную в другом месте, вы можете использовать yarn unlink.

cd ~/programming/main
yarn unlink MyLocalDependency
cd ~/programming/dependency
yarn unlink

Если вы используете NPM вместо Yarn, npm link и npm link <dependency> работают эффективно одинаково. Чтобы отключить зависимость, запустите npm rm --global <dependency>. (Это связано с тем, что npm link работает путем создания simlink в глобальном наборе пакетов NPM, поэтому удаление связанной зависимости из глобальных пакетов также нарушает связь.)

См. Документацию по npm link на npm link и Как удалить пакет, установленный с использованием ссылки npm?

Ответ 2

Переустановка пакета после простого удаления модуля узла работает с:

yarn install --check-files

Ответ 4

Как ответил Кевин, yarn link является хорошим вариантом.
Но это может вызвать некоторые проблемы, если пакет, на который вы ссылаетесь, имеет одноранговые зависимости.

То, что сказал Карл Адлер, это еще один способ:

yarn --check-files

Но это будет переустанавливать (yarn без подкоманды аналогично yarn install) каждого пакета, который изменился.

Итак, если вы действительно хотите просто переустановить один пакет:

yarn add package-name --force