如何强制Yarn重新安装包?

时间:2017-01-26 00:21:16

标签: node.js yarnpkg

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

8 个答案:

答案 0 :(得分:58)

在删除节点模块后重新安装包使用:

yarn install --check-files

答案 1 :(得分:15)

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

如果您的主项目位于<body>且您的相关性位于~/programming/main并且名为~/programming/dependency,则您需要:

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

yarn link

2)从主项目中运行cd ~/programming/dependency yarn link

yarn link <name of dependency package>

你已经完成了!

如果要从依赖项的本地副本切换到其他位置托管的副本,可以使用yarn unlink

cd ~/programming/main
yarn link MyLocalDependency

如果您使用的是NPM而非Yarn,cd ~/programming/main yarn unlink MyLocalDependency cd ~/programming/dependency yarn unlink npm link的工作方式相同。要取消链接依赖关系,请运行npm link <dependency>。 (这是因为npm rm --global <dependency>通过在全局NPM包集中创建simlink来工作,因此从全局包中卸载链接依赖项也会破坏链接。)

请参阅the npm link documentationHow do I uninstall a package installed using npm link?

答案 2 :(得分:5)

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

答案 3 :(得分:3)

除了这些答案,我在切换git分支和yarn时遇到了问题。我有一个分支用于更新node_modules软件包,另外一个分支用于修复我的项目错误。当我检查错误修复并返回更新分支时,yarn installyarn返回:

success Already up-to-date.
✨  Done in 0.79s.

但是未安装所有新软件包。因此,使用下面的命令,我强行安装了所有软件包:

yarn --check-files

现在它返回:

?  Building fresh packages...
✨  Done in 79.91s.

答案 4 :(得分:2)

Kevin self-answered一样,yarn link是一个不错的选择。
但是,如果要链接的程序包具有 peer 依赖项,则可能会导致一些问题。

Karl Adler said也是一种解决方法:

yarn --check-files

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

因此,如果您真的只想重新安装一个软件包:

yarn add package-name --force

答案 5 :(得分:1)

尽管这不是Yarn的答案(它似乎确实可以在纱线上工作,没有package.lock或其他任何东西),但这是我最终为赛普拉斯所做的事情(赛普拉斯将文件放到恕我直言的地方,不应该,如果您要在CI中缓存node_modules ...,请留下此答案,以防其他人对我有类似的问题,并找到这篇文章。

npm rebuild cypress

答案 6 :(得分:1)

如果您像我一样,并且正在安装您的个人软件包之一(没有其他人可以访问),则将其重新设置基础,然后强行将其推送到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

然后您就可以安装了。

答案 7 :(得分:0)

试试:

  1. yarn cache clean [<module_name...>]

  2. 纱线添加 []