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

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

  •  2
     
  •   superhot · 8 天前 · 1449 次点击

    如果不使用 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  
       8 天前
    直接用 pnpm 吧
    xiejay97
        2
    xiejay97  
       8 天前
    试试 Nx 吧
    https://nx.dev/
    kunkunzhang
        3
    kunkunzhang  
       8 天前
    后端应该不需要,bundle 浪费时间而已
    9ki
        4
    9ki  
       8 天前
    1. 配置多个 tsconfig.json, 理论上你可以在项目根目录创建一个 tsconfig.json, 在业务模块 'extend' 它

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

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

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

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