V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
forsigner
V2EX  ›  程序员

TieJS: 一个基于 TypeScript 的个人级 Node.js 框架

  •  
  •   forsigner · 2021-05-18 11:45:47 +08:00 · 3294 次点击
    这是一个创建于 1287 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这个一个我个人开发 Node.js 框架,一个基于 TypeScript 的 Node.js 框架,底层基于 Koa 和 TypeDI,核心特性是使用依赖注入组织应用代码。

    项目地址: https://github.com/forsigner/tie

    为什么开发 TieJS,我刚开始用了两年多 Egg.js ,但是由于其对 TypeScript 支持过于弱(还有其他原因略过),放弃 Egg.js 了,尝试使用了一个月 NestJS,由于其概念过于多、使用繁琐等原因也放弃了,所以开发了 TieJS,前后大概开发和维护了一年多时间。

    我自己是 TypeScript 和 GraphQL,并且相比 Express,我更喜欢 Koa 的中间件系统,所以开发了 TieJS,核心特性是使用依赖注入组织应用代码,还有一个就是内置 GraphQL 的支持。

    Tie 意为绳子,在 TieJS 中,最核心的单元是一个个 Injectable 的模块,通过依赖注入这根绳子,你可以有序地组织一个复杂的项目。也放弃了 NestJS 引入 Node 社区所有复杂的概念。

    一些特性

    TypeScript, 全面拥抱 TypeScript 依赖注入,易于编写可维护、可测试的代码 基于 Koa,易于可以复用 Koa 中间件生态 开箱即用,零配置开始项目 插件体系, 易于扩展

    核心技术

    TieJS 使用下面这些开源技术:

    • Koa
    • TypeDI
    • TypeGraphQL
    • TypeORM
    • class-validator

    这个框架因为个人原因,特性更新的比较慢,欢迎有兴趣的人一起维护和开发,如果有人有兴趣,我会把代码库转移到一个 Github 组织,并且开放开发权限,可以加我微信:ziyi-314,当然加微信普通交流也可以 哈哈

    第 1 条附言  ·  2021-05-20 19:31:58 +08:00

    有 V友说有个群好交流,所以建个微信群 (或者加我微信 ziyi-314):

    gTY0vq.png

    33 条回复    2021-05-20 19:32:36 +08:00
    foranuttarachen
        1
    foranuttarachen  
       2021-05-18 12:11:21 +08:00
    tie 有在实际的项目用到吗
    tinytin
        2
    tinytin  
       2021-05-18 12:12:27 +08:00
    关注下
    tinytin
        3
    tinytin  
       2021-05-18 12:14:49 +08:00
    @tinytin 为什么不直接用 nest.js 呢
    chogath
        4
    chogath  
       2021-05-18 12:15:24 +08:00
    为什么不直接用 nest.js 呢 -0-
    forsigner
        5
    forsigner  
    OP
       2021-05-18 12:21:07 +08:00
    @foranuttarachen 已经在几个商业项目跑了一年多了
    forsigner
        6
    forsigner  
    OP
       2021-05-18 12:26:25 +08:00
    @tinytin 最主要的是 NestJS 概念太多,太复杂,学习成本太高,降低了开发体验,对我个人而言,我只希望把 TypeScript 的 (类型安全) 和 依赖注入 (代码注入) 使用在 Node 框架中,Nest 强行把非常多 Spring 的概念和理念引入框架中,这不是我喜欢的,可能是个人品味的问题吧
    forsigner
        7
    forsigner  
    OP
       2021-05-18 12:26:42 +08:00
    @chogath 同上面
    soshao1188
        8
    soshao1188  
       2021-05-18 12:28:05 +08:00
    egg 的 typescript 有什么问题吗?看到也是支持的
    chogath
        9
    chogath  
       2021-05-18 12:54:14 +08:00
    感觉楼主没太想明白,node.js 的 web 框架各有优劣,使用哪种框架完全取决于工程场景。 类型安全和依赖注入也不是银弹。你给我的感觉是为了用而用 ...
    abersheeran
        10
    abersheeran  
       2021-05-18 12:59:31 +08:00
    赞。我看看有没有好用的点可以抄的 hhh
    galikeoy
        11
    galikeoy  
       2021-05-18 12:59:53 +08:00
    @tinytin #2 撞头像了 我还以为我啥时候回复了呢
    chogath
        12
    chogath  
       2021-05-18 13:03:19 +08:00
    @galikeoy 哈哈 🤣
    IvanLi127
        13
    IvanLi127  
       2021-05-18 13:49:59 +08:00
    @galikeoy
    @tinytin
    御坂妹妹不存在撞头像一说,个体番号不一样就不叫撞
    susan0007
        14
    susan0007  
       2021-05-18 14:12:26 +08:00
    强势围观
    forsigner
        15
    forsigner  
    OP
       2021-05-18 14:31:11 +08:00
    @chogath 所以你想表达我没想太明白什么?既然 [node.js 的 web 框架各有优劣,使用哪种框架完全取决于工程场景] ,你怎么得出别人创造一个东西是没使用场景的结论?
    forsigner
        16
    forsigner  
    OP
       2021-05-18 14:32:53 +08:00
    @soshao1188 eggjs 很好,有一个问题是它的 typescript 支持靠工具生产 d.ts 文件来解决的,实际使用会有很多不爽的地方
    ivens98
        17
    ivens98  
       2021-05-18 15:14:10 +08:00
    挺好的,但是没有大公司背书有点不敢用。
    agdhole
        18
    agdhole  
       2021-05-18 16:14:03 +08:00
    这类框架不敢用的唯一原因就是怕跑路
    yoa1q7y
        19
    yoa1q7y  
       2021-05-18 16:23:16 +08:00
    看了下文档,感觉跟 nest.js 差不多,少了 Guards 、Pipes 等概念,然而你确定后面不会加上这些么
    forsigner
        20
    forsigner  
    OP
       2021-05-18 16:35:00 +08:00
    @ivens98 我自己用 哈哈😆
    forsigner
        21
    forsigner  
    OP
       2021-05-18 16:35:37 +08:00
    @agdhole 跑不了,实际只是 koa 的上层封装而已
    forsigner
        22
    forsigner  
    OP
       2021-05-18 16:38:15 +08:00
    @yoa1q7y 不会,Guards 、Pipes 、filters 等东西在中间件处理已经很优雅,也很好理解,没必要创建那么多概念,而已它们之间还有功能交集,很容易让人困惑
    yoa1q7y
        23
    yoa1q7y  
       2021-05-18 16:45:16 +08:00
    @forsigner 然而 nest.js 官方文档对于每个概念也给出了充足的解释为什么要这么划分,每个概念有不同的使用场景。这么做确实提高了使用门槛和加大了理解难度,但是对于大型项目和多人合作项目,nest 这么做应该是有好处的
    chogath
        24
    chogath  
       2021-05-18 17:38:05 +08:00
    @forsigner 个人用的,不就是玩具么 - -
    EPr2hh6LADQWqRVH
        25
    EPr2hh6LADQWqRVH  
       2021-05-18 17:53:08 +08:00   ❤️ 1
    挺好,我大概三年前也是和你类似的想法。

    但我现在根本不拘泥于 HTTP 了,大家都只是 RPC 。

    所以 Nest.js 和你这个我觉得都存在一个问题,只是程度不一样,就是太 HTTP 了。

    抛弃掉路径的概念,整个过程更简单,更适合装饰器和类写法。

    我现在用得最爽的是参数类,运行时自动类型检查和过滤。
    chogath
        26
    chogath  
       2021-05-18 17:56:06 +08:00
    @avastms +1,所以用 go 写了 😺
    soshao1188
        27
    soshao1188  
       2021-05-20 10:11:36 +08:00
    我准备入坑你这个框架,搞个群大家多交流下。有问题也好解决啊
    soshao1188
        28
    soshao1188  
       2021-05-20 16:22:25 +08:00
    @forsigner 请问在吗?
    forsigner
        29
    forsigner  
    OP
       2021-05-20 19:23:37 +08:00
    @yoa1q7y 所以每个人偏好不一样,就像有人喜欢 React,接受不了 Angular
    forsigner
        30
    forsigner  
    OP
       2021-05-20 19:24:34 +08:00
    @chogath 个人用的也可以不是玩具 哈哈 不过请忽略标题...
    forsigner
        31
    forsigner  
    OP
       2021-05-20 19:25:27 +08:00
    @avastms web 项目大部分还是只能 http
    forsigner
        32
    forsigner  
    OP
       2021-05-20 19:26:18 +08:00
    @soshao1188 可以啊,那我建个群
    forsigner
        33
    forsigner  
    OP
       2021-05-20 19:32:36 +08:00
    @soshao1188 群有了,看文字结尾
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3394 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 00:43 · PVG 08:43 · LAX 16:43 · JFK 19:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.