使用Seeding遇到对等依赖… 我当时傻了
问题的出现有时候涉及的东西是多样的。这篇我主要聊一聊通过seeding的使用导致我遇到的对等依赖问题。但是我依然会花费篇幅去讲涉及到的其他知识,即使可能会让这篇文章重点偏离。我会通过一些特殊描述来引导理解这个问题主要看哪些东西。
主要我在处理问题的时候,如果时间不紧张我也会采取发散思维的方式,慢一点去解决。因为发散的东西总会是我不太清楚的知识和问题,这是有助于我成长的。
一、前置场景(问题场景)
使用Midway.js开发接口,使用了TypeORM作为服务和数据库的中介进行数据库的读取操作。遇到的需求是:怎么在服务启动的时候可以判断数据库表中有没有默认的数据,如果没有进行补充默认数据。
我的解决方案:①使用seeding。②自己写sql或者在服务启动的某个位置执行脚本来给数据库添加。
最终采取的事第二种方案,原因是第一种没有走通。没走通的原因就是遇到了对等依赖的问题,并且在解决后还是没怎么用明白。因为任务需要及时交付,我就采取了我想到的第二种方法。
二、介绍一下涉及的名词和问题(问题主要看第2点)
1)Seeding,这里要说的是一个typeorm的扩展插件
Seeding 官方解释参考:What is it? | typeorm-extension (tada5hi.net)
**官方解释:**创建一些相同的数据在你的数据库中。Create some sample data for your database
**用我的话说:**正如这个单词的含义,这就是个种子。我们可以在程序里种好种子,程序启动时它就仿佛春风吹过,万物复苏,然后生长出一些东西。在我的这个服务中,它主要是要做在服务启动的时候默认给数据库中添加一些默认的数据。就比如需要有默认的管理账户、默认的展示信息,这些信息是为了帮助用户快速了解我们的功能模块。就好比一些笔记工具像语雀、notion它们都会给你默认的描述文档,这些文档就可以通过seeding默认创建好模板,只要有新用户就给用户通过模板给用户创建一些 Readme 文件什么的。
这么一段废话只是为了让知识偷偷摸摸溜进我的脑子。进不进你的🤔… 我可就管不着了~
有小伙伴就要问了,干嘛那么麻烦,我写好一些SQL不就好了吗?
No,没那么简单。我们可以通过sql默认插入没错,但是①我们编写这个插入信息的文档费时费力,而且需要调试;②我采用了 typeorm 进行数据库操作,我就是为了不写 sql,用 typeorm 很方便;③我了解到很多数据库都有seed的功能支持,并且问了ChatGPT,也告知我使用这个方案是安全且容易的。(我当时看着确实觉得很容易,看这个文章:Seeding | typeorm-extension (tada5hi.net),主要内容我放下面了,主要意思就是可以通过4~5个步骤就能实现默认数据插入,而且很好理解。Entity 本来就要,那我只要关心则呢么配置和写seed就好了)
△ 2)对等依赖(peer dependencies)
我把运行时遇到的几个情况截图放在下面,先看表现:(都是对等依赖)
1、使用 pnpm 添加依赖报的警告
2、使用 npm 添加依赖直接报错
看到这里,或许有的小伙伴就懂了什么是对等依赖。
**“对等依赖”**是指两个或多个组件、系统或实体之间的相互依赖关系。在计算机科学和软件工程中,对等依赖通常指的是系统中的组件或模块之间的相互依赖,这些依赖关系是相互平等的,即彼此之间没有明显的层次结构或控制关系。
对等依赖的特点包括:
- 相互依赖:各个组件或模块之间相互依赖,彼此之间需要进行通信、交互