npm私有源构建项目下载依赖报错

Jenkins构建项目报错,依赖找不到

js 复制代码
Error: Couldn't find any versions for "@babel/helper-module-imports" that matches "^7.22.15"
    at MessageError.ExtendableBuiltin (/data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node16/lib/node_modules/yarn/lib/cli.js:721:66)
    at new MessageError (/data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node16/lib/node_modules/yarn/lib/cli.js:750:123)
    at Function.<anonymous> (/data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node16/lib/node_modules/yarn/lib/cli.js:50351:13)
    at Generator.next (<anonymous>)
    at step (/data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node16/lib/node_modules/yarn/lib/cli.js:310:30)
    at /data1/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node16/lib/node_modules/yarn/lib/cli.js:321:13
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (node:internal/process/task_queues:96:5)
Build step 'Execute shell' marked build as failure
Deleting 1 temporary files
SSH: Current build result is [FAILURE], not going to run.
Finished: FAILURE

前置小知识

Node.js中package.json中^和~的区别

  1. ~会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0
  2. ^会匹配最新的大版本依赖包,比如 ^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0

分析问题

  1. 由于项目依赖一般都以~或者^开头,npm源某些依赖如果升级,那我们项目在构建的时候,就会根据前置小知识中的规则去获取最新包
  2. 公司搭建了npm私有源,但是与npm官方源同步频率时间未设置,导致下载不到应有的最新的包

解决方案

方案一

  1. npm官方网站看当前下载失败的依赖上一次稳定的版本号

  2. 找到合适的版本号 在项目中package.json进行锁定版本号,举例说明如下:

    json 复制代码
    {
    	"resolutions": {
    	    "@babel/helper-module-imports": "7.22.5",
    	  }
    }

方案二

npm私有源是通过Nexus统一管理的

  1. 登录Nexus
  2. 我们配置npm私有源一般会建立三个仓库
项目 说明
hosted 本地仓库。提供本地私库功能
group 组仓库。组类型,可以组合多个仓库为一个地址提供服务
proxy 代理仓库。提供代理其他仓库的类型,可以设置官方源或者镜像源
  1. 进入proxy仓库配置页
  2. 修改配置

Maximum component age

这个的含义是获取到 remote 包后,多长时间开始缓存,改成 -1, 意思是获取到就缓存
Maximum metadata age

多长时间去 remote 仓库获取下源信息, 默认是 30天 ,

比方说 vue 这个包,今天上午10点发布了一个版本 2.7.15,你在11点执行 npm install vue@2.7.15,是会报 404 的,因为私服是30天获取一次 remote 仓库的信息,所以最好设置 30分钟以内,这样就可以快速获取到更新了

相关推荐
北海-cherish2 小时前
vue中的 watchEffect、watchAsyncEffect、watchPostEffect的区别
前端·javascript·vue.js
2501_915909063 小时前
HTML5 与 HTTPS,页面能力、必要性、常见问题与实战排查
前端·ios·小程序·https·uni-app·iphone·html5
white-persist4 小时前
Python实例方法与Python类的构造方法全解析
开发语言·前端·python·原型模式
新中地GIS开发老师5 小时前
Cesium 军事标绘入门:用 Cesium-Plot-JS 快速实现标绘功能
前端·javascript·arcgis·cesium·gis开发·地理信息科学
Superxpang5 小时前
前端性能优化
前端·javascript·vue.js·性能优化
Rysxt_5 小时前
Element Plus 入门教程:从零开始构建 Vue 3 界面
前端·javascript·vue.js
隐含5 小时前
对于el-table中自定义表头中添加el-popover会弹出两个的解决方案,分别针对固定列和非固定列来隐藏最后一个浮框。
前端·javascript·vue.js
大鱼前端5 小时前
Turbopack vs Webpack vs Vite:前端构建工具三分天下,谁将胜出?
前端·webpack·turbopack
你的人类朋友5 小时前
先用js快速开发,后续引入ts是否是一个好的实践?
前端·javascript·后端