gpt4 book ai didi

npm - npm/yarn install 期间的 "Linking Dependencies"到底有什么作用?

转载 作者:行者123 更新时间:2023-12-03 10:02:53 25 4
gpt4 key购买 nike

对于大型 Web 应用程序 npm install分别yarn install确实需要很多时间,主要是在一个名为 Linking Dependencies 的步骤中.这里发生了什么?它是否获取依赖项的依赖项?还是完全不同的东西?在此步骤中创建了哪些文件?

最佳答案

当您调用 yarn install ,依次发生以下事情:

  • 分辨率 : Yarn 通过向注册表发出请求并递归查找每个依赖项来开始解析依赖项。
  • 下载/获取 : 接下来,Yarn 会在全局缓存目录中查找所需的包是否已经下载。如果没有,Yarn 会获取包的 tarball 并将其放置在全局缓存中,这样它就可以离线工作,并且不需要多次下载依赖项。依赖项也可以作为 tarball 放置在源代码管理中,以进行完整的离线安装。
  • 链接 : 最后,Yarn 将所有需要的文件从全局缓存中复制到本地 node_modules 目录中,然后确定哪些已经存在,哪些不存在,从而将所有内容链接在一起。


  • yarn install does take a lot of time, mostly in a step called Linking Dependencies



    您应该注意到 Step 3: Linking花费的时间超过 Step 1: ResolutionStep 2: Fetching实际下载发生的地方。在这一步中,我们已经准备好并下载了需要的东西,那为什么要花很长时间,我们错过了什么吗?

    是的, 复制 到本地项目到 node_modules文件夹...!这样做的原因是,这个副本并不等同于复制一个 4.7GB 的大 ISO 文件。相反,它是多个超小文件(当我说多个时不要轻描淡写,它可以是 15k+ 个文件:P),因此需要大量时间来复制。 (另外,重要的是要注意,当您下载软件包时,您会为每个软件包下载一个大 tar 文件,然后将其内容提取到缓存中,这也需要时间)

    由于速度较慢
  • 杀毒 :您的防病毒软件位于中间,对每个文件进行快速检查(除了我们的 yarn 检查它是否已经存在), yarn 试图复制以大大降低其速度。如果您使用的是 Windows,请尝试将项目的父文件夹添加为 Windows Defender 的异常(exception)。
  • 存储介质的传输速率 :SSD 可以极大地提高这个速度(抱歉,SSHD 和 FireCudas 也无济于事,这将是一次)。


  • 但这有效吗?我可以从全局 node_modules 中获取它(创建一个之后)吗?

    两个问题都不行。由于节点的工作方式,每个包都只能找到与其自身位置相关的依赖项。还因为每个项目可能希望使用同一包的不同版本以确保其正常工作并且不会被包更新破坏。

    理想情况下,项目文件夹应该是精简的。一种有效的方法是使用 全局 node_modules文件夹。如果尚未存在并从该位置使用,则下载任何和所有请求的包。其实 Ruby这样做。这是我的全局 Ruby 相当于 node_modules文件夹。请注意在不同项目中使用相同包的不同版本。

    enter image description here

    但请记住,它会降低项目的可移植性。这是任何管理器(无论是 ruby​​gems 还是节点模块)都必须做出的权衡。我可以只复制节点项目文件夹(实际上可能需要几个小时,因为您还将复制(本地) node_modules 文件夹,但如果我只有那个项目文件夹,而不是复制,我可以期望它可以工作一个 ruby​​ 项目只需要几秒钟到几分钟,因为没有本地包(或他们称之为 gems)文件夹,但是在不同的系统上运行项目需要这些包存在于全局 gems 文件夹中。

    关于npm - npm/yarn install 期间的 "Linking Dependencies"到底有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50683248/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com