V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
superhot
V2EX  ›  问与答

当前 TS 全栈 monorepo 的最佳实践是什么?

  •  2
     
  •   superhot · 18 小时 16 分钟前 · 1201 次点击

    如果不使用 Next.js 或 T3 Stack 这样的全栈框架,仅用最朴素的 React + Express + TS ,项目的结构与各类配置(package.json/tsconfig/eslint 等等)怎样配置最合理且优雅?

    1. 配 tsconfig 的时候,因为共享部分的代码需要同时跑在浏览器和 Node 上,targetmoduleResolution 之类的应该怎么配呢?
    2. 在前后端分别引入共享代码的时候,是把共享部分单独打包成 npm 包,然后各自作为项目依赖引入?还是直接通过相对路径引入呢?相对路径的话,有些嵌套特别深的地方,会有很长一串 ../../,想通过 paths 配别名,但这个配置不影响运行时行为,Node 下会不识别引入路径,该如何解决呢?
    3. 前端可以用 Vite  构建,后端也需要用 bundler 吗?还是直接跑编译后的 js 文件即可?
    15 条回复    2025-01-22 15:54:04 +08:00
    sjhhjx0122
        1
    sjhhjx0122  
       18 小时 14 分钟前
    直接用 pnpm 吧
    xiejay97
        2
    xiejay97  
       18 小时 8 分钟前
    试试 Nx 吧
    https://nx.dev/
    kunkunzhang
        3
    kunkunzhang  
       18 小时 8 分钟前
    后端应该不需要,bundle 浪费时间而已
    9ki
        4
    9ki  
       18 小时 0 分钟前
    1. 配置多个 tsconfig.json, 理论上你可以在项目根目录创建一个 tsconfig.json, 在业务模块 'extend' 它

    2. 共享代码独立在单独的目录, 通过 package.json 的 main 属性指定入口, 然后通过 `@scope/module` 的形式引入在其他业务模块

    3. 后端不需要 bundler
    superhot
        5
    superhot  
    OP
       17 小时 50 分钟前
    @9ki
    > 通过 `@scope/module` 的形式引入在其他业务模块
    那就是需要提前打包成 npm 包并发布到 registry 才行了是吗?
    9ki
        6
    9ki  
       17 小时 44 分钟前
    @superhot 搜索引擎搜搜 monorepo example github
    liaozzzzzz
        7
    liaozzzzzz  
       17 小时 35 分钟前 via iPhone
    monorepe 方案楼上提到了 nx ,我也推荐这个,你想要的共享代码直接引入即可,不需要发布 npm
    1. tsconfig 项目弄个 base 配置,然后各自 app 内部继承覆盖各段配置就 OK 了
    2. ts 的 path 是可以识别的,运行的时候需要 tsc
    2. node 服务队不需要复杂的 bundler ,tsc 就可以了
    monkeyWie
        8
    monkeyWie  
       17 小时 35 分钟前
    建议直接用 T3 ,如果不想要 SSR 的话,nextjs 也支持 SGR ,我现在就是这样用的
    Hanser002
        9
    Hanser002  
       17 小时 35 分钟前
    pnpm + turborepo
    juzisang
        10
    juzisang  
       17 小时 2 分钟前
    引入 nx 带来了更复杂的问题,因为 nx 官方提供了很多 plugin 。一行命令让你项目里多出来 n 多包和文件,文档并没有说这些东西的作用,需要挨个去查阅...

    如果只是把 nx 作为一个纯管理工具,打包运行配置都是自己写,turborepo 的配置比 nx 简单清晰很多。
    horizon
        11
    horizon  
       16 小时 46 分钟前   ❤️ 1
    可以参考这个,实际的项目
    创始人加入 notion ,然后把这个开源了

    https://github.com/campsite/campsite
    xiaojie668329
        12
    xiaojie668329  
       14 小时 59 分钟前
    nx 配置太复杂了,用了一次再也不想用了。
    项目没有大到需要它的话,不建议
    461229187
        13
    461229187  
       13 小时 51 分钟前
    nx 有点复杂,直接 turborepo 省事
    zhwithsweet
        14
    zhwithsweet  
       13 小时 49 分钟前
    Simonzzz
        15
    Simonzzz  
       11 小时 19 分钟前
    rush 啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1027 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:13 · PVG 03:13 · LAX 11:13 · JFK 14:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.