89

我的项目有一个依赖项,我有时从包服务器获取,有时从我机器上的本地副本获取。因此,我经常需要在查找依赖项的地方使用 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 使用我的依赖项的最新版本?

4

8 回答 8

149

仅删除节点模块后重新安装软件包适用于:

yarn install --check-files

于 2017-10-05T09:07:51.983 回答
35

你可以使用yarn link命令。这将设置您的本地依赖项,以便每当您对依赖项进行更改时,它会立即显示在您的主项目中,而您无需执行任何其他操作来更新它。

如果您的主项目在~/programming/main并且您的依赖项在~/programming/dependency并且被命名MyLocalDependency,您将需要:

yarn link1)从您的依赖项中运行(没有其他标志):

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 来工作,因此从全局包中卸载链接的依赖项也会破坏链接。)

请参阅文档如何卸载使用 npm 链接安装的软件包npm link

于 2017-01-26T17:23:57.203 回答
32

还有另一种方式。只需使用yarn upgrade package-name

见手册:https ://yarnpkg.com/lang/en/docs/cli/upgrade/

于 2019-03-02T17:16:11.060 回答
25

正如凯文自我回答的那样,yarn link是一个不错的选择。
但是,如果您要链接的包具有对等依赖项,则可能会导致一些问题。

Karl Adler 所说的也是一种方法:

yarn --check-files

但这将重新安装(yarn没有子命令与相同yarn install)每个已更改的软件包。

所以,如果你真的只想重新安装一个包:

yarn add package-name --force
于 2019-06-04T21:07:29.443 回答
10

除了这些答案之外,我在切换 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.
于 2020-03-01T07:13:47.220 回答
3

虽然这不是 Yarn 的答案(它似乎确实适用于纱线,没有 package.lock 或任何东西),这就是我最终为 cypress 做的事情(cypress 将文件放在恕我直言的地方,它不应该,如果你'正在 CI 中缓存 node_modules ... 留下这个答案,以防其他人遇到与我类似的问题,并找到这篇文章。

npm rebuild cypress
于 2020-04-19T16:05:34.950 回答
2

尝试:

  1. 纱线缓存清理 [<module_name...>]

  2. 纱线添加 [<module_name...>]

于 2021-06-21T07:16:28.100 回答
2

如果您像我一样正在安装您重新设置基础然后强制推送到 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

然后你可以安装没有问题。

于 2020-05-02T15:23:34.000 回答