有在使用 nx 前端 build 系统的吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
towry
V2EX    Node.js

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

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

    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   1
    刚试用他们的 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   1
    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   1
    @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     Solana     3028 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 13:13 PVG 21:13 LAX 05:13 JFK 08:13
    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