有在使用 nx 前端 build 系统的吗?

2022-10-21 10:31:05 +08:00
 towry

https://nx.dev/

用起来怎么样?有什么可分享下的吗,谢谢。

5021 次点击
所在节点    Node.js
13 条回复
alexsunxl
2022-10-21 10:59:53 +08:00
别的先不提。
它们这个官方访问体验真是好的离谱啊。
ericgui
2022-10-21 11:18:27 +08:00
刚试用他们的 Get Started
结果 NX cannot find project "is-even"

第一步就挂了

卒。。。
TMaize
2022-10-21 15:15:17 +08:00
现在 lerna 的项目默认好像就是使用 nx
zbinlin
2022-10-21 17:08:20 +08:00
@ericgui 它这个示例有问题,package.json 里的 name 是 @package-based/is-even ,你改成 is-even 就可以了
233373
2022-10-21 17:31:59 +08:00
Monorepo 的概念,一个项目多个 app 放在一个 repo 下面
wenerme
2022-10-21 18:16:39 +08:00
觉得 turbo+pnpm 体验比 nx 包,构建使用 esbuild+rollup
wenerme
2022-10-21 18:17:07 +08:00
s/包 /好 /
towry
2022-10-22 15:27:27 +08:00
目前还不知道 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 处理了。
towry
2022-10-28 13:59:47 +08:00
更新:

最近一直在折腾 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 模块。
towry
2022-10-28 14:01:06 +08:00
authgemail
2023-02-04 10:59:09 +08:00
#10 的这个修改还要注意 esm 和 cjs 的问题,nodejs 项目需要 patch 修改一下
crysislinux
2023-07-13 11:27:50 +08:00
OP 现在感觉怎么样了,我们也有两个项目用了 nx ,感觉有点受到限制,我们技术栈是 Angular 和 Nestjs ,nx 把 angular 的 cli 包装了,然后一点也没用 nestjs 的 cli ,这导致 angular cli 更新了或者想用 nest cli 的一些特性就很麻烦,心里容易没谱不知道下一次更新又会有什么问题。
towry
2023-07-30 12:42:40 +08:00
@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 文件上的版本。

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

https://www.v2ex.com/t/888641

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

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

© 2021 V2EX