解决内网环境下已经同步了依赖,执行 npm install 依旧失败的问题

在前端项目中,有时候会遇到在内网环境中构建打包,这个时候由于需要安装依赖,在内网中搭建了 nexus但是这个nexus并没有连接外网,只能通过工具将依赖在可以连接外网的环境下,将依赖下载下来,打包复制到内网环境中,将这些依赖上传到nexus,这样就可以做到即使在连接不上外网的情况下,也是可以顺打包构建的,但是有时这里也会有很大的一个坑。

因为有些包是从github 或者非当前这个 nexus下载的,所以这个时候会造成执行安装依赖 npm install失败,解决这个问题的步骤

1. 生成 package-lock.json文件

在本地安装依赖的实际,会生成一个package-lock.json的文件,这个文件会记录package.json 中的每一个依赖包的子依赖包,以及每一个依赖包的下载地址和下载的具体某一个版本,所以在这种情况下,package-lock.json 是不能删除的。在提交代码的时候,需要将这个文件一并提交上去。

2. 检查 package-lock.json文件

在 提交 package-lock.json文件之前,需要检查一下,在 package-lock.json文件中,是否有依赖是从 GitHub上下载的.

例如:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XI9q5E4m-1604376264478)(evernotecid://621D2FF6-4E72-4E02-9043-55F31F42819B/appyinxiangcom/22553815/ENResource/p1221)]

  • 可以从以下两点检查
  1. package-lock.json中from字段中包含了指定具体依赖的的url
  2. package-lock.json中使用git:<github_url> 的方式来指定version。

3. 解决 package-lock.json存在从GitHub上下载的依赖包。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hlbkfcNd-1604376264494)(evernotecid://621D2FF6-4E72-4E02-9043-55F31F42819B/appyinxiangcom/22553815/ENResource/p1221)]

比如:对于上述这个依赖包可以 淘宝源中找到这个依赖以后,将这个依赖通过淘宝源进行安装,然后将安装后的package-lock.json的片段覆盖到这里,就可以了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3oT87rcO-1604376264495)(evernotecid://621D2FF6-4E72-4E02-9043-55F31F42819B/appyinxiangcom/22553815/ENResource/p1221)]

需要注意的是,这里的版本要对应,即:GitHub上对应的版本,和这里下载的版本要一致。

  • 这里修改的理由

在内网环境下,依赖包都是从外网环境同步到内网的,对于那些直接从github或其他url获取并且不能指定下载地址的依赖,是始终在执行npm install的时候都是失败的,所以为了避免这种情况的发生,所以要将这些改成从同步的nexus 上下载。

4. 解决类似node-sass 可以直接指定下载地址的插件

参见 解决内网环境中node-sass不能下载从而导致构建失败的问题

5. 提交 package-lock.json文件

6. 同步当前项目的依赖到内网环境的nexus