回看前年的项目,我在下载依赖的时候就报错了

起因

最近公司接了个新项目打算使用前年的项目的框架基础开发,最后决定安排我这个菜鸟预热项目。当我克隆项目下来之后下载依赖之后一些依赖报错了,我就回想原本项目完美的收尾了为啥现在就连下载依赖都这么困难,所以打算写这篇文章。现在我的node版本是v16。下载依赖报错图片:

排查问题

从上面的图片看到我们下载依赖的时候有个commander依赖需要node版本v18+,然后我们就按照提示使用nvm将node版本切换到v18,这时候又发现下载依赖没问题了,但是我们启动的时候出现了问题,看图片:这是什么错误呢,因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响。

总结问题

现在我们得到了结果,一个是项目依赖中要求使用对应的版本下载依赖,二个是node版本17版本之后跟项目本身不匹配。如果在17版本上改可能需要做一次项目升级,那我就还是在node版本v16找问题吧。

解决办法

回看第一个图片报错信息是commander依赖需要node版本v18+,那我们找到项目哪里用到这个依赖,项目中没有用到这个依赖,那也就是依赖中用到这个依赖。那我们就要知道是哪个依赖用到了commander@v12版本。

  1. 在根目录运行npm ls commander就能知道整个项目用到commander依赖的包了。贴图出来:
  2. 进入node_modules/mockjs看他的依赖,贴图:
  3. 发现这个包使用了*号,它有什么作用:它匹配任何可用的 commander 版本,包括主版本、次版本和修订版本。这意味着当运行 npm install 命令时,npm 将会安装 commander 的最新版本,而不考虑其具体的版本号。所以导致我们在下载依赖的时候报错了。
  4. 问题找到了,最后我们在项目中限制一下改依赖的版本就行但是又不能直接写死所以我的写法是:
  5. 意思是resolutions 字段用于解决依赖项的版本冲突。当在 resolutions 中指定依赖项及其版本范围时,npm 将会强制安装指定的版本,而不考虑范围之外的版本就完美解决该问题了。
相关推荐
Sarvartha3 分钟前
三目运算符
linux·服务器·前端
晓晨的博客10 分钟前
ROS1录制的bag包转换为ROS2格式
前端·chrome
Wect18 分钟前
LeetCode 72. 编辑距离:动态规划经典题解
前端·算法·typescript
donecoding31 分钟前
别再让 pnpm 跟着 nvm 跑了!独立安装终极指南
前端·node.js·前端工程化
GISer_Jing33 分钟前
AI全栈转型_TS后端学习路线
前端·人工智能·后端·学习
竹林81833 分钟前
被The Graph的GraphQL查询坑了三天,我用一个真实DeFi项目把链上数据索引彻底搞懂了
前端·graphql
漫游的渔夫33 分钟前
前端开发者做 Agent:别只会执行,用 4 类失败策略让 AI 知道怎么停
前端·人工智能·typescript
用户0595401744636 分钟前
把多级缓存一致性验证从手工测试换成 Pytest 参数化,Bug 排查时间缩短 90%
前端·css
暗不需求38 分钟前
深入理解 LangChain:AI 应用开发框架的工程化实践
前端·langchain
用户059540174461 小时前
把 Redis 持久化测试从 800 行 Shell 换成 30 行 pytest,排错效率翻了 10 倍
前端·css