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

20 小时 59 分钟前
 superhot

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

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

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

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

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

https://github.com/campsite/campsite
xiaojie668329
17 小时 43 分钟前
nx 配置太复杂了,用了一次再也不想用了。
项目没有大到需要它的话,不建议
461229187
16 小时 34 分钟前
nx 有点复杂,直接 turborepo 省事
zhwithsweet
16 小时 33 分钟前
Simonzzz
14 小时 2 分钟前
rush 啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1106948

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX