V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
towry
V2EX  ›  Node.js

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

  •  
  •   towry · 2022-10-21 10:31:05 +08:00 · 4978 次点击
    这是一个创建于 748 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://nx.dev/

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

    第 1 条附言  ·  2022-10-21 14:12:19 +08:00
    实验了好大会,感觉 turborepo 更灵活上手更快。
    13 条回复    2023-07-30 12:42:40 +08:00
    alexsunxl
        1
    alexsunxl  
       2022-10-21 10:59:53 +08:00
    别的先不提。
    它们这个官方访问体验真是好的离谱啊。
    ericgui
        2
    ericgui  
       2022-10-21 11:18:27 +08:00
    刚试用他们的 Get Started
    结果 NX cannot find project "is-even"

    第一步就挂了

    卒。。。
    TMaize
        3
    TMaize  
       2022-10-21 15:15:17 +08:00
    现在 lerna 的项目默认好像就是使用 nx
    zbinlin
        4
    zbinlin  
       2022-10-21 17:08:20 +08:00
    @ericgui 它这个示例有问题,package.json 里的 name 是 @package-based/is-even ,你改成 is-even 就可以了
    233373
        5
    233373  
       2022-10-21 17:31:59 +08:00
    Monorepo 的概念,一个项目多个 app 放在一个 repo 下面
    wenerme
        6
    wenerme  
       2022-10-21 18:16:39 +08:00
    觉得 turbo+pnpm 体验比 nx 包,构建使用 esbuild+rollup
    wenerme
        7
    wenerme  
       2022-10-21 18:17:07 +08:00
    s/包 /好 /
    towry
        8
    towry  
    OP
       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
        9
    towry  
    OP
       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 模块。
    authgemail
        11
    authgemail  
       2023-02-04 10:59:09 +08:00
    #10 的这个修改还要注意 esm 和 cjs 的问题,nodejs 项目需要 patch 修改一下
    crysislinux
        12
    crysislinux  
       2023-07-13 11:27:50 +08:00
    OP 现在感觉怎么样了,我们也有两个项目用了 nx ,感觉有点受到限制,我们技术栈是 Angular 和 Nestjs ,nx 把 angular 的 cli 包装了,然后一点也没用 nestjs 的 cli ,这导致 angular cli 更新了或者想用 nest cli 的一些特性就很麻烦,心里容易没谱不知道下一次更新又会有什么问题。
    towry
        13
    towry  
    OP
       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 文件上的版本。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3096 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 12:51 · PVG 20:51 · LAX 04:51 · JFK 07:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.