如何强制 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 linknpm 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 installyarn 返回:

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 重新安装软件包?的主要内容,如果未能解决你的问题,请参考以下文章

yarn 如何更新所有的依赖包到最新版本

如何强制重新安装 React 组件?

新立得软件包管理器坏了怎么重新下载

强制在纱线之前运行 npm install ?

win10用vs2017社区版写代码电脑会卡死,任务管理器也没用,只能按电源强制关机,怎么破

E: 软件包*需要重新安装,但是我无法找到相应的安装文件。(ubuntu14.04)