superhot
V2EX  ›  问与答

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

  •  2
     
  •   superhot · Jan 22, 2025 · 3608 views
    This topic created in 661 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    https://github.com/campsite/campsite
    voidcomma
    voidcomma
    Jan 22, 2025
    12
    nx 配置太复杂了,用了一次再也不想用了。
    项目没有大到需要它的话,不建议
    461229187
    461229187
    Jan 22, 2025
    13
    nx 有点复杂,直接 turborepo 省事
    zhwithsweet
    zhwithsweet
    Jan 22, 2025
    14
    Simonzzz
    Simonzzz
    Jan 22, 2025
    15
    rush 啊
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2168 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 48ms · UTC 01:12 · PVG 09:12 · LAX 17:12 · JFK 20:12
    ♥ Do have faith in what you're doing.