【问题标题】:How do I force Yarn to reinstall a package?如何强制 Yarn 重新安装软件包?
【发布时间】:2017-06-11 08:55:13
【问题描述】:

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

【问题讨论】:

  • 我在聊天中讨论过这个问题:chat.stackoverflow.com/rooms/17/conversation/… 我在聊天中得到的建议有时会奏效,但我很难始终如一地更新我的本地依赖项。
  • 删除你的 node_modules 目录,用正确的版本更新你的 package.json,然后重新安装所有东西。纱线快;只需几秒钟。
  • @EzraChang 正如我在问题中所讨论的,我已经尝试过了,但没有成功。

标签: node.js yarnpkg


【解决方案1】:

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

如果您的主项目位于 ~/programming/main 中,而您的依赖项位于 ~/programming/dependency 中并命名为 MyLocalDependency,您将需要:

1) 在您的依赖项中运行 yarn link(没有附加标志):

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 linknpm link <dependency> 以相同的方式有效地工作。要取消链接依赖项,请运行 npm rm --global <dependency>。 (这是因为npm link 通过在全局 NPM 包集中创建一个 simlink 来工作,因此从全局包中卸载链接的依赖项也会破坏链接。)

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

【讨论】:

    【解决方案2】:

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

    yarn install --check-files

    【讨论】:

    • 当源是 git repo 时不会
    • 我不确定你的意思...通常来源是一个 git repo 并且它可以工作。
    • @abimelex 我认为 Jaime 在 package.json 中的引用是这样的:"dependencies" : { "project" : "user/project#branch-name" }.
    • 只是,我现在需要的!谢谢:]
    • 这修复了我的“错误:找不到模块'../lib/completion'”和类似的问题prob引起的巨型同步!谢谢!
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      作为Kevin self-answeredyarn link 是一个不错的选择。
      但是如果你链接的包有 peer 依赖,它可能会导致一些问题。

      Karl Adler said 也是一种方法:

      yarn --check-files
      

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

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

      yarn add package-name --force
      

      【讨论】:

        【解决方案5】:

        除了这些答案之外,我在切换 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.
        

        【讨论】:

          【解决方案6】:

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

          npm rebuild cypress
          

          【讨论】:

            【解决方案7】:

            如果你像我一样,正在安装你的一个个人包(没有其他人可以访问),你重新设置然后强制推送到 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
            

            你可以安装没有问题。

            【讨论】:

              【解决方案8】:

              试试:

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

              2. 纱线添加 []

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2015-04-11
                • 1970-01-01
                • 2021-11-17
                • 2014-09-19
                • 2019-03-08
                • 2017-10-31
                • 1970-01-01
                • 2016-06-17
                相关资源
                最近更新 更多