为什么自制软件要求我在链接仅桶配方时添加 --force 选项?



运行后

brew install yarn

我的系统上安装了以下版本的node

$ node -v
v10.5.0

因为nodeyarn的依赖(如果我错了,请纠正我,请告诉我我是否也对(

但它会导致yarn出现问题(我面临的问题是这个(,所以我想使用旧版本的node让我的应用程序现在可以工作。据此,我做了这些:

$ brew install node@8
$ brew unlink node
$ brew link node@8

但是$ brew link node@8给了我以下内容:

Warning: node@8 is keg-only and must be linked with --force
Note that doing so can interfere with building software.
If you need to have this software first in your PATH instead consider running:
echo 'export PATH="/usr/local/opt/node@8/bin:$PATH"' >> ~/.zshrc

我使用了 rvm,只需使用rvm use ruby-version-here就可以切换 ruby,所以我认为brew link formula会起作用,但为什么它需要强制?

我知道brew的桶只意味着它只在地窖中,而不是在/usr/local/bin/或/usr/local/lib/中链接,但brew链接不是帮助我们链接它,为什么它需要--force选项,它做什么,感觉很危险。

brew help link说:

如果传递了 --

force(或 -f(,Homebrew 将允许仅使用小桶的公式 被链接。

我们为什么要小心地将它们联系起来?我们会破坏一些东西吗?

我想用node@8代替node (the latest version),正确的方法是什么?我只是按照brew的建议使用force选项运行吗?

更新1:当我继续搜索并找出原因时,我看到了这个,但我并不完全理解它。链接到新版本的公式时,似乎需要删除一些文件。但我认为链接只是替换某处的链接,也许只是替换一个文件?为什么要创建一个特定的 --force 选项来链接到新的仅桶公式?我怀疑仅桶配方的性质有一些特殊之处。有人明白为什么吗?

注意:这个和这个解释了仅桶的含义

首先,是的,nodeyarn的依赖项,您可以使用以下命令进行检查:

brew deps yarn

那么--force选项可能不是很好命名,但它可以按照手册页中所说的操作:

如果传递了 --

force(或 -f(,Homebrew 将允许链接仅桶的公式。

这就是自制软件的工作方式,没有恐惧。

== 编辑

在以前的Homebrew版本中,文档更加清晰:

如果传递--force,Homebrew将在链接时删除前缀中已经存在的文件。

如果通过--dry-run-n,Homebrew将列出所有文件,这些文件将 被brew link --force删除,但实际上不会链接或删除 任何文件。

== 编辑 (2(

下面是引入--force参数以允许链接仅桶公式之前的讨论。其背后的原因是,在系统范围内安装仅桶公式可能会干扰其他需要某些特定版本的标准程序的工具。

相关内容

最新更新