我们在用npm下载包的时候,有时候会碰到这样的提示
这是npm的警告,说我们使用的nodejs版本与下载的包所要求的nodejs版本不一致。
这是因为有些包它对nodejs的版本有要求,然后就会在package.json文件里的engines字段里声明它所要求的nodejs版本。
比如这样
javascript"engines": { "node": "^12.20.0 || ^14.15.0 || ^16.10.0" },
这段代码的意思就是要求nodejs版本得是>=12.20.0并且<13.0.0,或者是>=14.15.0并且<15.0.0,又或者是>=16.10.0并且小于17.0.0。
所以上面的警告就是因为我的nodejs版本是18.19.1,不符合它的要求。
那这个时候应该怎么解决这个问题,通常有三种方法。第一种,就是升级或者降级你的nodejs,使nodejs符合包的要求。
第二种就是升级你的包,有些包升级了之后对nodejs的要求也不一样了,可能升级之后就符合你的nodejs版本了,这要看具体的包。
第三种就是更换一个功能类似又符合你的nodejs版本的包。
那就会有一个问题,就是为什么有些包对nodejs的版本会有要求?这个原因有很多,可能是这个包依赖某个nodejs版本特有的API,因为不同的nodejs版本可能有不同的api,升级了之后这个api可能就被删除或者修改了, 不符合包的要求了。
又或者说是这个包所使用的包对nodejs版本有要求,所以连带着这个包也得对nodejs版本有要求。
又可能是某些nodejs版本有已知的安全漏洞或者不稳定因素,包的开发者出于对包的安全性和稳定性考虑,可能会特意声明避开这些版本。
所以原因可能有很多,各种各样,大家还是尽量按照包的的要求来使用包。
那为什么有时候你的nodejs版本和包要求的nodejs版本不一样,却也能正常使用它。
这个可能是因为nodejs版本虽然不一样,但你的nodejs版本能兼容它所要求的版本,功能都能正常使用。又或者说这个包只有部分代码部分功能对nedejs版本有要求,而你所使用到的功能和代码刚好不包括那部分有要求的代码,所以能正常使用。
比如说ngx-custom-validators这个包,这个包为什么会对nodejs版本有要求呢,是因为它依赖angular13.3.11版本,而angular13.3.11对nodejs版本有要求,所以连带着它也对nodejs版本有要求,可以看下面这张图:
那为什么我不按它的要求,用18版本的nodejs,也能正常使用?
这是因为angular对nodejs的版本的要求是需要是LTS,也就是长期维护版。而当时最高的长期维护版就是16了。所以它的要求只到16。但其实后续的nodejs18LTS版本也能兼容angular13.3.11。所以我用nodejs18LTS版本也能正常使用ngx-custom-validators这个包。
Angular由一个bug说起之十:npm Unsupported engine
KenkoTech2024-09-27 13:23
相关推荐
langzitianya3 天前
XMLHttpRequest接受chunked编码传输的HTTP Response时有问题KenkoTech8 天前
Angular由一个bug说起之十二:网页页面持续占用CPU过高张某人的胡思乱想11 天前
angular19-官方教程学习KenkoTech16 天前
Angular由一个bug说起之十一:排序之后无法展开 Row余生H22 天前
Angular v19 (三):增量水合特性详解 - 什么是水合过程?有哪些应用场景?与 Qwik 相比谁更胜一筹?- 哪个技术好我就学哪个,这就是吸心大法吧crary,记忆1 个月前
Angular中的ngOnchange()的汇总Greg_Zhong1 个月前
Angular 和 Vue2.0 对比无敌喜之郎2 个月前
Angular数据绑定详解无敌喜之郎2 个月前
虚拟滚动 - 从基本实现到 Angular CDK金木讲编程2 个月前
Angular 中 UntypedFormGroup和FormGroup的区别?