😂😂浪费了 3 天时间尝试在新项目中使用 prisma,最后还是决定回到 typeorm

125 天前
 flyingcrp

兄弟们,prisma 有坑,快跑🏃‍♀️💨💨💨💨💨💨💨💨

https://github.com/prisma/prisma/issues/101421

https://github.com/prisma/prisma/issues/10142#issuecomment-1835279273

https://github.com/prisma/prisma/issues/20128

在遇到上面 1,2 的时候硬着头皮继续,但是遇到 3 的时候彻底让我放弃了它。

提桶跑路了 🏃‍♀️💨💨💨💨💨💨💨

兄弟们,节约时间,原理 prisma

4864 次点击
所在节点    Node.js
48 条回复
subframe75361
125 天前
试试 kysely ,sql 的写法。或者用更火但 dx 差一些的 drizzle orm
yaodong0126
125 天前
😂你还真别说,迷信 prisma 的人多的一腿
ultimate42
125 天前
我是从 typeorm 转到 prisma 的,prisma 确实有不少痛点,时区,联表查嵌套层级深什么的,但感觉开发体验上,prisma 还是要好一点
857681664
125 天前
同样 delete 一个不存在的数据也会报错,官方解决方案说是用 executeRaw..
qiubaowei
125 天前
还好我是守旧派 一直用 sequelize
flyingcrp
125 天前
@ultimate42 我试了,确实不行。model 中注释都不支持。感觉还是差点意思
flmn
125 天前
drizzle 比较好
BeautifulSoap
125 天前
也借地方顺便也让大家避坑一个 ORM:千万不要用 drizzle ,千万不要用 drizzle ,千万不要用 drizzle
Hbisedm
125 天前
drizzle
asen001
125 天前
@BeautifulSoap drizzle 有什么坑,有个私活项目用 drizzle 开发到一半了,别吓我
SolidZORO
125 天前
说一个小众 ORM https://sutando.org/ ,底层是 knex ,进可 ORM ,退可 knex RAW 。

之所以是说而不是推荐,因为实在太小众,推荐的话实在担不起这个责任,只想让更多人知道它。sutando 作者维护不算积极,total 就两人维护,start 几十,但是手感是我用过所有 ORM 里面最好的,基本上做到了 1:1 对标 Laravel 的 Eloquent ,用起来及其优雅。比堪称是 nodejs 届 Laravel 的 adonisjs 自带强耦合的 lucid 还要想像 Eloquent 。

y1s1 Node 这边的 ORM 真是烂得可以。drizzle 烂。Prisma 烂,typeORM 烂中烂。

唯一能打一下的是 sequelize ,的确是可靠了,但是及其啰嗦,TS 支持太差(我是说第三方,第一份约等于没有),以及无止境的 beta 让人又爱又恨。
yandif
125 天前
@BeautifulSoap 同问有啥坑?
BeautifulSoap
125 天前
@asen001 真用了那就用嘛,也不是不能用,反正之前写 drizzle 我是真的火大
官方文档写得一塌糊涂,看起来很正规但有用的信息基本没多少
schema 一堆特性不支持,连最基本的 index desc asc, union index 都不支。到最后不光要写 schema 还要自己去写额外的 migration sql
类型检查基于 schema 定义,如果我 select 的字段里掺杂了动态生成自动的内容(比如 COUNT(*)之类)的话,过类型检查能折腾死人
执行 raw sql 并且获取到返回值而且要过类型检查比登天都难
等等等等,反正下次项目里谁跟我说用 drizzle 我跟谁急
12tall
125 天前
knex 应该是用的最舒服的了,虽然只是一个 builder
wunonglin
125 天前
drizzle +1
flyingcrp
125 天前
目前应该是在 typeorm 中暂时不打算出去了。
prisma 在构建和打包时也会有很多问题。不设置 binary 的话会直接多 30M+的大小。很离谱。
然后里面还有一个奇怪的地方,当前 prisma 已经让用自定义 output 路径去做 client 的引入。
但是底层似乎有依赖了 prisma ,这个里面有个 public 文件夹,里面全是一些文档还是啥的。也是三十多 M.
justdoit123
125 天前
也尝试使用 prisma ,说说我觉得的痛点与疑惑,希望有经验的解答下:

1. prisma 不生成 class ,如何进一步跟 class-validator 以及 swagger 结合?
2. 不生成 class ,如果我有很简单的 computed field ,就不知道怎么实现。虽然官方有 [Client extension]( https://www.prisma.io/docs/orm/prisma-client/queries/computed-fields#using-a-prisma-client-extension) 方案,但是 extend 后的 model 类型获取不直接。虽然可以通过类型体操获取。
3. 个人对滥用 DSL 很反感。DB 的 schema 真的到了需要叠一层 DSL 的程度了吗? 我个人认为还没必要,这样做的收益不高。为了“无缝”切换 DB 类型吗?正常项目开发不会频繁切换 DB 类型,况且也无法做到无缝。 想要降低使用 DB 的门槛吗?熟悉一个 DB 真的是后端的基础门槛,你虽然可以暂时欠着,但是终究要还上,借助 DSL 会很被动,学的都是人家嚼碎了喂你的东西。prisma 用 DSL 描述 schema 的理由,我能想到的唯一理由应该就是他们的野心是实现一个跨语言的 ORM 。
ByteCat
125 天前
在用 drizzle ,感觉很爽,可以写类似 sql 的语法,复杂查询很方便
Hanggi
125 天前
感觉楼主还是对 ts 的编程思想理解和 prisma 的使用方法上...有不一致吧。
技术选型按自身的理解和喜好来就可以了。

看看 prisma 自己对 typeorm 的对比,有没有吸引自己转战的特性,
https://www.prisma.io/docs/orm/more/comparisons/prisma-and-typeorm

至少目前看来 prisma 是趋势,能早点上手就早收益,用不来也没必要强求,毕竟有那么多人还在宣扬不用 orm ,sql 就应该手写,hhh 。
https://npmtrends.com/prisma-vs-sequelize-vs-typeorm
Belmode
125 天前
我就觉得用 Prisma 能省点事,不用写一堆像 TypeOrm 中那样的实体对象,写很多注解

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1131986

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX