Angular由一个bug说起之十:npm Unsupported engine

我们在用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这个包。

相关推荐
无敌喜之郎3 天前
Angular数据绑定详解
前端·javascript·angular·数据绑定
无敌喜之郎4 天前
虚拟滚动 - 从基本实现到 Angular CDK
前端·typescript·angular·虚拟滚动
金木讲编程5 天前
Angular 中 UntypedFormGroup和FormGroup的区别?
angular
无敌喜之郎9 天前
Angular 15 独立组件详解
前端·javascript·angular·独立组件
无敌喜之郎14 天前
Angular 控制流与延迟视图揭秘
typescript·angular·1024程序员节
余生H18 天前
JS异步编程进阶(二):rxjs与Vue、React、Angular框架集成及跨框架状态管理实现原理
javascript·vue.js·react.js·angular·rxjs·异步编程
职教育人22 天前
前端三大框架对比与选择
前端·vue.js·react·angular
优联前端22 天前
前端框架对比和选择
前端框架·vue·react·angular·优联前端
无敌喜之郎23 天前
Angular signal信号详细解析
前端·typescript·angular·signal
zqwang88823 天前
Angular 实现 keep-alive (路由复用)
前端·angular·angular.js