用起来怎么样?有什么可分享下的吗,谢谢。
1
alexsunxl 2022-10-21 10:59:53 +08:00
别的先不提。
它们这个官方访问体验真是好的离谱啊。 |
2
ericgui 2022-10-21 11:18:27 +08:00
刚试用他们的 Get Started
结果 NX cannot find project "is-even" 第一步就挂了 卒。。。 |
3
TMaize 2022-10-21 15:15:17 +08:00
现在 lerna 的项目默认好像就是使用 nx
|
4
zbinlin 2022-10-21 17:08:20 +08:00
@ericgui 它这个示例有问题,package.json 里的 name 是 @package-based/is-even ,你改成 is-even 就可以了
|
5
233373 2022-10-21 17:31:59 +08:00
Monorepo 的概念,一个项目多个 app 放在一个 repo 下面
|
6
wenerme 2022-10-21 18:16:39 +08:00
觉得 turbo+pnpm 体验比 nx 包,构建使用 esbuild+rollup
|
7
wenerme 2022-10-21 18:17:07 +08:00
s/包 /好 /
|
8
towry OP 目前还不知道 nx 怎么管理单独应用里的 package.json 依赖,似乎不支持,见 https://github.com/nrwl/nx/issues/1777
但是 turborepo 就支持的很好,官方文档里就有例子。见这个评论: https://github.com/nrwl/nx/issues/1777#issuecomment-1100573328 目前的想法就是: - turborepo 用于 monorepo 管理,app 构建。 - plop 用于代码模板生成。 - 使用 git-submodules 管理大的 app ,防止整个 monorepo ,同时提供脚本命令方便添加应用和更新应用代码。 - 集成 storybook ,nx 有 storybook 插件可以很方便的管理,在 turbo 里只能自己用 plop 处理了。 |
9
towry OP 更新:
最近一直在折腾 nx 。nx 对 yarn/npm 管理的 monorepo 感觉文档很少,然后 nx 通过很多黑魔法来实现现在它的一些特性。 对于 turborepo ,它是借助于 yarn/npm 的 workspace 特性管理依赖的,然后提供 任务 pipeline 和 构建缓存机制。nx 则是在各个执行器 excuators 里面,进行了封装。比如 webpack 的 executor 会利用 tsconfig.json 里的 path 进行依赖注册,这样,当你进行 `import @myOrg/someModule/someFile.ts` 的时候,尽管你没有在你的 app 项目里进行依赖声明,nx 会自动帮你解决依赖引用的问题,对于 webpack 使用的是 ts-node 。对于 nodejs 类型的使用的是 hack 的方式,将你项目中用到的依赖都计算出来,然后给到 node 的 module 模块。 |
10
towry OP |
11
authgemail 2023-02-04 10:59:09 +08:00
#10 的这个修改还要注意 esm 和 cjs 的问题,nodejs 项目需要 patch 修改一下
|
12
crysislinux 2023-07-13 11:27:50 +08:00
OP 现在感觉怎么样了,我们也有两个项目用了 nx ,感觉有点受到限制,我们技术栈是 Angular 和 Nestjs ,nx 把 angular 的 cli 包装了,然后一点也没用 nestjs 的 cli ,这导致 angular cli 更新了或者想用 nest cli 的一些特性就很麻烦,心里容易没谱不知道下一次更新又会有什么问题。
|
13
towry OP @crysislinux 没有用 nx ,的确限制很大。
现在已经落地使用的是 turborepo ,灵活落地快,配置很简单(几乎不需要啥配置)。 turborepo 做多任务(构建,开发等)管理,它会处理任务之间的依赖的,同时利用缓存,减少你总任务的处理时间。 比如你运行 turbo run build lint test --filter="{./packages/*}[HEAD~0]" 他会运行所有 packages 目录下的,git 上有更改的包的 build lint test 任务。在运行 build 任务的时候,如果你在 turbo.json 配置文件中声明了 build 任务依赖处理,那么它会计算这个包的依赖关系,先去构建这个包所依赖的包的 build 任务。 整个前端项目的基础设施实现利用了 turborepo, changeset, pnpm 来完成的。pnpm 方便做 workspace 的管理,以及在发包的时候,可以运行 pnpm publish -r --report-json 来发布那些有新的版本还没有发布过的包,同时生成 json 文件报告。通过 changeset 来管理包的版本,更新更个 package 文件上的版本。 |