yarn --prefer-offline 有什么作用?

What does yarn --prefer-offline do?

我假设当我安装 npm 包时说第一次反应

yarn add react

这会将反应文件保存在本地缓存中。我发现 .yarn-cache 包含许多文件。我假设它是 yarn 本地缓存文件夹,以便以后我再次​​安装 react 时,它将从本地缓存安装,不是吗??

如果以后需要再安装react,是不是就这么写:

yarn add react

或者这个:

yarn add react --prefer-offline

A quite popular guy 这里是 S.O。说:

"Read the Source, Luke!"

这是 yarn CLI 的 --prefer-offline 标志的 the source

commander.option('--prefer-offline', 'use network only if dependencies are not available in local cache');

尽情享受吧!

我的理解是默认情况下,当你 install/restore 时,yarn 总是会尝试从互联网上下载包,并且还会将其存储在缓存中,这意味着将来如果你尝试到 install/restore 并且没有互联网连接,它可以回退到缓存并在必要时从那里安装。通过指定 --prefer-offline,您将反转此行为,以便它首先检查缓存,并且仅在无法在缓存中找到包时才尝试从 Internet 下载包。这可以使你的 install/restores 明显更快,并允许你执行可重复的构建,但你可能无法获得可用的最新版本(例如,如果你使用的是 ~1.2.3 之类的版本规范)。还有一个 --offline 选项,如果它在本地缓存中找不到包(即它永远不会尝试从 Internet 下载),则会抛出错误。

更多信息请访问 https://yarnpkg.com/blog/2016/11/24/offline-mirror/

为了使用 --prefer-offline,您首先必须设置您的离线包存储库。

让我们在主文件夹的隐藏目录中设置缓存:

yarn config set yarn-offline-mirror ./.npm-offline  

同时设置一个配置让 yarn 清理下载的压缩包:

yarn config set yarn-offline-mirror-pruning true

现在,每当您 运行 yarn install 在某个项目中时,它会将模块缓存在此目录中,供您使用 yarn --prefer-offline.

获取

当您稍后想要从缓存安装时,也许是在一个新项目中,您将需要指定所需的模块版本,因为它没有 latest 的概念。最简单的就是简单地尝试添加:

yarn add moment

在我的机器上打印:

error Couldn't find any versions for "moment" that matches "latest" in our cache. 
Possible versions: "2.1.0, 2.13.0, 2.17.0, 2.17.1, 2.18.1, 2.19.1, 2.19.2, 2.19.3, 2.8.4" 
// Note that above is not in semver order...

然后我可以安装最新的离线版本:

yarn add moment@2.19.3

@adrian 提到的 Yarn 博客 post 详细说明了如何为每个项目缓存以及如何在需要时为您的团队提交缓存。我自己只使用一个缓存,以便能够在离线时理想地 bootstrap 新项目。