当前 TS 全栈 monorepo 的最佳实践是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
superhot
V2EX    问与答

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

< href="Javascript:" Onclick="upVoteTopic(1106948);" class="vote">
  •  2  
  •   superhot 267 天前 2433 次点击
    这是一个创建于 267 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    https://github.com/campsite/campsite
    xiaojie668329
        12
    xiaojie668329  
       267 天前
    nx 配置太复杂了,用了一次再也不想用了。
    项目没有大到需要它的话,不建议
    461229187
        13
    461229187  
       267 天前
    nx 有点复杂,直接 turborepo 省事
    zhwithsweet
        14
    zhwithsweet  
       267 天前
    Simonzzz
        15
    Simonzzz  
       267 天前
    rush 啊
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2997 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 13:03 PVG 21:03 LAX 06:03 JFK 09:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86