如何强制 Yarn 重新安装软件包?
Posted
技术标签:
【中文标题】如何强制 Yarn 重新安装软件包?【英文标题】:How do I force Yarn to reinstall a package? 【发布时间】:2017-06-11 08:55:13 【问题描述】:我的项目有一个依赖项,我有时从包服务器获取,有时从我机器上的本地副本获取。因此,我经常需要在寻找依赖项的地方使用 Yarn 开关。此外,我经常更改依赖项的本地副本,并且需要看到该更改反映在我的主项目中。因此,我需要一种方法来告诉 Yarn 继续查看依赖项的相同位置,但要重新安装依赖项,跳过缓存并直接从其当前源获取它,即使版本号没有更改。 (有时我想尝试对依赖项进行小的更改,每次更新版本号很快就会变得很烦人。)
我该怎么做?
我已经尝试了以下方法,但它们都不起作用:
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
仍然继续使用之前版本的依赖。
如何确保 Yarn 使用的是我的最新版本的依赖项?
【问题讨论】:
我在聊天中讨论过这个问题:chat.***.com/rooms/17/conversation/… 我在聊天中得到的建议有时会奏效,但我很难始终如一地更新我的本地依赖项。 删除你的 node_modules 目录,用正确的版本更新你的 package.json,然后重新安装所有东西。纱线快;只需几秒钟。 @EzraChang 正如我在问题中所讨论的,我已经尝试过了,但没有成功。 【参考方案1】:您可以使用yarn link
command。这将设置您的本地依赖项,以便每当您对依赖项进行更改时,它会立即显示在您的主项目中,而您无需执行任何其他操作来更新它。
如果您的主项目位于 ~/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
通过在全局 NPM 包集中创建一个 simlink 来工作,因此从全局包中卸载链接的依赖项也会破坏链接。)
见the npm link
documentation和How do I uninstall a package installed using npm link?
【讨论】:
【参考方案2】:仅删除节点模块后重新安装软件包适用:
yarn install --check-files
【讨论】:
当源是 git repo 时不会 我不确定你的意思...通常来源是一个 git repo 并且它可以工作。 @abimelex 我认为 Jaime 在 package.json 中的引用是这样的:"dependencies" : "project" : "user/project#branch-name"
.
只是,我现在需要的!谢谢:]
这修复了我的“错误:找不到模块'../lib/completion'”和类似的问题prob引起的巨型同步!谢谢!【参考方案3】:
还有另一种方法。
只需使用yarn upgrade package-name
见手册:https://yarnpkg.com/lang/en/docs/cli/upgrade/
【讨论】:
【参考方案4】:作为Kevin self-answered,yarn link
是一个不错的选择。
但是如果你链接的包有 peer 依赖,它可能会导致一些问题。
Karl Adler said 也是一种方法:
yarn --check-files
但这将重新安装每个已更改的包(yarn
没有子命令与yarn install
相同)。
所以,如果你真的只想重新安装一个包:
yarn add package-name --force
【讨论】:
【参考方案5】:除了这些答案之外,我在切换 git 分支和 yarn
时遇到问题。我有一个用于更新node_modules
包的分支和另一个用于修复我的项目错误的分支。当我检查错误修复并返回更新分支时,yarn install
或 yarn
返回:
success Already up-to-date.
✨ Done in 0.79s.
但所有新软件包都没有安装。所以使用下面的命令,我强制 yarn 安装所有的包:
yarn --check-files
现在它返回了:
? Building fresh packages...
✨ Done in 79.91s.
【讨论】:
【参考方案6】:虽然这不是 Yarn 的答案(它似乎确实适用于纱线,没有 package.lock 或任何东西),这就是我最终为 cypress 所做的事情(cypress 将文件放在恕我直言的地方,它不应该,如果你在 CI 中缓存 node_modules... 留下这个答案,以防其他人遇到与我类似的问题,并找到这篇文章。
npm rebuild cypress
【讨论】:
【参考方案7】:如果你像我一样,正在安装你的一个个人包(没有其他人可以访问),你重新设置然后强制推送到 git,并收到错误:
$ yarn add https://github.com/username/my-rebased-package.git
error Command failed.
Exit code: 128
Command: git
Arguments: pull
Directory: /Users/eric/Library/Caches/Yarn/v6/.tmp/8ebab1a3de712aa3968f3de5d312545b
Output:
error: Pulling is not possible because you have unmerged files.
hint: Fix them up in the work tree, and then use 'git add/rm <file>'
hint: as appropriate to mark resolution and make a commit.
fatal: Exiting because of an unresolved conflict.
info Visit https://yarnpkg.com/en/docs/cli/add for documentation about this command.
你可以通过直接删除缓存文件夹来解决这个问题:
$rm -rf /Users/eric/Library/Caches/Yarn/v6/.tmp/8ebab1a3de712aa3968f3de5d312545b
你可以安装没有问题。
【讨论】:
【参考方案8】:试试:
yarn cache clean [<module_name...>]
纱线添加 [
【讨论】:
以上是关于如何强制 Yarn 重新安装软件包?的主要内容,如果未能解决你的问题,请参考以下文章