当前位置: 首页 > news >正文

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

我们在用npm下载包的时候,有时候会碰到这样的提示

这是npm的警告,说我们使用的nodejs版本与下载的包所要求的nodejs版本不一致。

这是因为有些包它对nodejs的版本有要求,然后就会在package.json文件里的engines字段里声明它所要求的nodejs版本。

比如这样

"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这个包。

http://www.lryc.cn/news/444696.html

相关文章:

  • Android 开发高频面试题之——Flutter
  • 视频单目标跟踪研究
  • 若依vue3.0表格的增删改查文件封装
  • 【已解决】如何使用JAVA 语言实现二分查找-二分搜索折半查找【算法】手把手学会二分查找【数据结构与算法】
  • ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded
  • .NET 6.0 WebAPI 使用JWT生成Token的验证授权
  • M9410A VXT PXI 矢量收发信机,300/600/1200MHz带宽
  • 用工厂模式演示springboot三种注入方式 | @Autowired
  • es查询语法
  • LabVIEW提高开发效率技巧----合理使用数据流与内存管理
  • 如何在 ECharts 中设置轴标签
  • 怎么用gitee做一个图片仓库,在md文档中用这个图片网络地址,然后显示图片
  • Thinkphp(TP)
  • 【艾思科蓝】前端框架巅峰对决:React、Vue与Angular的全面解析与实战指南
  • IT行业的未来:技术变革与创新的持续推动
  • Python PDF转图片自定义输出
  • Git 常用操作命令说明
  • 自学前端的正确姿势是...
  • C/C++语言基础--C++构造函数、析构函数、深拷贝与浅拷贝等等相关知识讲解
  • json格式互相转换
  • Linux下共享内存详解
  • MySQL篇(管理工具)
  • redis学习笔记(六)
  • spring与springmvc整合
  • 如何使用Optuna在PyTorch中进行超参数优化
  • 2.Spring-容器-注入
  • 在uboot中添加自定义命令
  • AngularJS 模块
  • [yotroy.cool] MGT 388 - Finance for Engineers - notes 笔记
  • 2024年9月python二级易错题和难题大全(附详细解析)(三)