什么是;“链接依赖项”;在npm/纱线安装期间,您真的要做什么?

什么是;“链接依赖项”;在npm/纱线安装期间,您真的要做什么?,npm,npm-install,yarnpkg,Npm,Npm Install,Yarnpkg,对于大型web应用程序npm安装resp纱线安装确实需要很多时间,主要是在一个名为链接依赖项的步骤中。这里发生了什么?它正在获取依赖项的依赖项吗?还是完全不同的东西?在此步骤中创建了哪些文件?链接阶段主要分为三大步骤: 查找需要位于节点_模块中的每个文件 对照已存在的内容检查此列表,并找出需要复制的内容 从缓存到节点_模块 抄写 也许Github上的这个问题会帮助您解决问题 当您调用纱线安装时,以下事情按顺序发生: 解析:纱线通过向注册表发出请求并递归查找每个依赖项来开始解析依赖项 下载/获取:

对于大型web应用程序
npm安装
resp<代码>纱线安装确实需要很多时间,主要是在一个名为链接依赖项的
步骤中。这里发生了什么?它正在获取依赖项的依赖项吗?还是完全不同的东西?在此步骤中创建了哪些文件?

链接阶段主要分为三大步骤:

  • 查找需要位于节点_模块中的每个文件
  • 对照已存在的内容检查此列表,并找出需要复制的内容 从缓存到节点_模块
  • 抄写
  • 也许Github上的这个问题会帮助您解决问题


    当您调用
    纱线安装
    时,以下事情按顺序发生:

  • 解析:纱线通过向注册表发出请求并递归查找每个依赖项来开始解析依赖项

  • 下载/获取:接下来,Thread在全局缓存目录中查找所需的包是否已下载。如果没有,Thread将获取包的tarball并将其放置在全局缓存中,这样它就可以脱机工作,并且不需要多次下载依赖项。依赖项也可以作为tarball放置在源代码管理中,用于完全脱机安装

  • 链接:最后,纱线在识别出哪些已经存在,哪些没有之后,通过将所需的所有文件从全局缓存复制到本地node_modules目录,将所有内容链接在一起


  • 纱线安装
    确实需要很多时间,主要是在一个名为
    链接依赖项的步骤中

    您应该注意到
    第3步:链接
    第1步:解析
    第2步:获取
    实际下载所需的时间要长。在这一步中,我们已经准备好并下载了我们需要的东西,那么为什么要花很长时间,我们错过了什么

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

    这是缓慢的,因为

      <>强>防病毒<强>:你的防病毒坐在中间,做一个快速检查(除了我们的纱线检查,如果它已经存在)在每一个文件上,纱线正试图复制它的速度这么多。如果您在Windows上,请尝试将项目的父文件夹作为例外添加到Windows Defender
    • 存储介质的传输速率:SSD可以极大地提高此速度(很抱歉,SSD和FireCudas也帮不上忙,这只是一次)

    但这是否有效?我可以从全局节点_模块(创建一个模块后)获取它吗?

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

    理想情况下,项目文件夹应该是精简的。一种有效的方法是使用一个全局
    节点模块
    文件夹。如果尚未提供并从此位置使用任何和所有请求的软件包,则将下载这些软件包。实际上,Ruby是这样做的。下面是我的全局Ruby的
    node\u modules
    文件夹。请注意,在不同的项目中使用相同包的不同版本

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

    的文档可以在此处找到

    您可以使用该命令

    yarn install --verbose
    
    安装依赖项时显示其他日志

    输出将显示纱线/npm安装正在执行的操作

    这有利于在进程失败或需要很长时间的情况下进行调试