执行npm install提示elements@~0.1.2无匹配版本报错解决
执行npm install时抛出的报错如下:
npm ERR! notarget No matching version found for elements@~0.1.2.
npm ERR! notarget In most cases you or one of your dependencies are requesting
npm ERR! notarget a package version that doesn't exist.
报错根因
触发这个报错的核心问题按优先级排序如下:
- 你项目依赖的
elements包托管在Azure DevOps私有源,本地npm没有配置对应私有源地址,默认从公网npm官方源拉取。公网官方源上的elements是完全无关的其他包,不存在0.1.2这个版本,直接触发版本找不到的报错。 - 就算私有源配置正确,当前项目依赖版本和
elements的要求存在多处不兼容,后续安装、运行依然会失败:elements要求peer依赖为Angular 8.2.14版本,你项目声明的Angular版本是12.1.2,本地全局安装的Angular CLI更是13.2.0版本,跨多个大版本完全不兼容elements依赖tslib ^1.9.0,你项目devDependencies里声明的是tslib ^2.3.1,大版本不兼容会直接导致运行时报错elements要求peer依赖jquery ^3.5.1,你项目package.json里完全没有声明jquery依赖- 本地全局Angular CLI大版本(13.x)和项目内Angular版本(12.x)不一致,就算没有elements包的问题,执行ng命令时也可能出现奇怪的编译、运行错误
解决步骤
按顺序操作即可:
- 配置npm私有源
先找团队内维护elements包、或者之前搭过同项目的同事要现成的.npmrc配置,直接放到项目根目录,同时确认你的Azure DevOps账号有该私有源的包拉取权限。
如果需要自己写配置,在项目根目录新建.npmrc文件,把Azure DevOps源地址填进去,参考格式如下(替换占位符为你团队的实际信息):
配置完成后执行registry=https://pkgs.dev.azure.com/{你的组织名}/{项目名(项目级源需要填)}/_packaging/{源名称}/npm/registry/ always-auth=truenpm login --registry=上面填的源地址,按提示完成身份认证。 - 处理版本兼容问题,二选一即可:
- 方案一(推荐,改动成本最低):对齐
elements要求的依赖版本
先卸载本地全局高版本Angular CLI:
安装Angular 8配套的CLI版本:npm uninstall -g @angular/cli
改项目package.json的依赖:把所有@angular开头的依赖版本改成8.2.14,tslib版本改成npm install -g @angular/cli@8.3.29^1.14.1,dependencies里新增"jquery": "^3.5.1"。改完删掉项目根目录的node_modules文件夹和package-lock.json文件,重新执行npm install即可。 - 方案二:如果项目确定要使用Angular 12/13版本,直接找
elements包的维护人员,索要适配Angular 12+的高版本安装包,拿到对应版本号后替换package.json里"elements": "~0.1.2"的版本号,补装jquery依赖,确认tslib版本适配后重新安装即可。不要自己硬改0.1.2版本的elements源码做兼容,后续出问题没有官方维护,排查成本极高
- 方案一(推荐,改动成本最低):对齐
- 验证结果
所有配置修改完成后,在项目根目录重新执行npm install,如果依然报权限错误,直接检查你的Azure DevOps账号是否被加入私有源的权限组,有没有包读取权限。
内容的提问来源于stack exchange,提问作者KarieJ
相关产品推荐
相关产品推荐

