【问题标题】:What does yarn --prefer-offline do?yarn --prefer-offline 有什么作用?
【发布时间】:2017-09-28 06:52:12
【问题描述】:

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

yarn add react

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

如果我以后需要重新安装react,我是不是应该这么写:

yarn add react

或者这个:

yarn add react --prefer-offline

【问题讨论】:

    标签: javascript node.js build yarnpkg


    【解决方案1】:

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

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

    【讨论】:

    • > 但您可能无法获得可用的最新版本(例如,如果您使用的是 ~1.2.3 之类的版本规范),yarn.lock 文件不会指定您在这种情况下所需的确切版本?
    • 如果存在锁定文件,那么应该
    【解决方案2】:

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

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

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

    还设置一个配置,让 yarn 清理下载的 tarball:

    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 详细阐述了如何为每个项目缓存以及如何在需要时为您的团队提交缓存。我自己只使用一个缓存,以便能够在离线时启动新项目。

    【讨论】:

    • 这个 --prefer-offline 命令是否应该将默认行为应用于“纱线添加”过程?我正在尝试使用“ng new myproject”创建一个以yarn作为包管理器的角度项目。这需要使用已经下载到缓存的包来完成(因为我们的组织出于安全原因要求锁定这些资源)。由于 angular-cli 似乎没有告诉 yarn 使用“--offline”标志,缓存优先的要求似乎没有生效。
    • yarn 似乎在其配置中不接受offlineprefer-offline,因此该选项已退出。此外,ng 仅接受 npmyarncpnm,如其 ng set --global packageManager=* 命令。所以我的方法是 1)没有安装 cpnm 和 2)在你的路径中创建一个名为 cpnm 的 bash 脚本,它调用带有 --prefer-offline 标志集的纱线。然后将cpnm设置为ng的默认包管理器
    • @cyberwombat .yarnrc 可以接受 CLI args github.com/yarnpkg/yarn/issues/6398#issuecomment-499343824 的默认参数。只需将--install.prefer-offline true 添加到yarn.rc
    【解决方案3】:

    A quite popular guy 在 S.O.说:

    “阅读源代码,卢克!”

    这里是the sourceyarn CLI 的--prefer-offline 标志:

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

    享受吧!

    【讨论】:

    • 不太确定这是对 OP 的回答。这不是将此标志传递给yarn install 时运行的实际源代码;这只是运行yarn install --help 时为该标志提供的输出。我会让 OP 怀疑他们是否已阅读此帮助,否则他们怎么会知道标志本身存在?
    • 只是补充安德鲁的评论:感觉Yarn很擅长使用本地安装的文件,那为什么会有这个参数呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    • 2019-06-15
    • 2017-08-02
    • 1970-01-01
    • 2021-09-25
    • 2016-04-28
    相关资源
    最近更新 更多