[求助] CI/CD | npm 私有仓库 | npm 公共组件 | 抽取 npm 库的完整流程有没有什么最佳实践? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
realtozf
V2EX    Node.js

[求助] CI/CD | npm 私有仓库 | npm 公共组件 | 抽取 npm 库的完整流程有没有什么最佳实践?

  •  
  •   realtozf 2021-03-07 22:25:01 +08:00 2637 次点击
    这是一个创建于 1733 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ## 需求
    - 开发一个 npm 库,发到公司的私有仓库
    - 公司私有仓库分 snapshot 和 dist
    - 同时安排一个项目集成 snapshot 版本
    - CI/CD 每日 release 自动 publish snapshot 版本到私有仓库

    ## 产生的问题
    - 集成 snapshot 库的项目,提交了 lock 文件
    每日的 release 的时候会因为包的 hash 值变了而 install 失败

    ## 我这边现在方案:
    - 每天最后一次提交,手动点个 release
    - 然后让相关项目的开发在自己机器上手动 install 提交 lock 文件
    - 这样可以保证第二天凌晨 release 的 hash 值不变;
    -- 我这边觉得这个方案确实不太好,有些奇怪
    -- 尽量能自动化搞定的事情不应该手动处理这个

    ## 问题来了:
    - 各位兄弟姐妹,你们对于抽取 npm 库的完整流程有没有什么比较好的实践方案?
    确实是没有看到什么比较好的实践方案;
    13 条回复    2021-03-11 01:06:39 +08:00
    xuanbg
        1
    xuanbg  
       2021-03-07 22:47:54 +08:00
    Nexus 挺好用的
    xuanbg
        2
    xuanbg  
       2021-03-07 22:50:37 +08:00
    公共组件库的 release 版本应该有一定的稳定性,某个项目使用了某个版本,在没有升级需求前,应该不需要更新组件库的版本。
    KuroNekoFan
        3
    KuroNekoFan  
       2021-03-08 08:08:20 +08:00 via iPhone
    既然提交了 lock,就应该用 npm ci
    kongkx
        4
    kongkx  
       2021-03-08 09:31:13 +08:00 via iPhone
    没看懂什么情况,ci 里面改 registry 然后进行 install,跟 本地跑 install 有什么区别吗
    realtozf
        5
    realtozf  
    OP
       2021-03-08 10:18:07 +08:00
    @xuanbg
    用的就是 nexus 做私有仓库
    抽取公共组件库的时候,抽取的过程中,需要安排一个项目版本去集成使用
    达成出版本条件之后出个版本,这个过程必然会出发频繁的更新包的操作,但是版本不变的

    @KuroNekoFan
    每天构建的包会替换掉同版本的,sha1 是变化的



    @xuanbg
    @KuroNekoFan
    @kongkx
    感谢回复,我这边主要是想问问:
    抽取 npm 库的完整流程有没有什么比较好的实践方案?
    从确定需求->开发->其他项目集成->发布版本
    这一整个流程,有没有什么标准的流程
    KuroNekoFan
        6
    KuroNekoFan  
       2021-03-08 12:54:56 +08:00 via iPhone
    monorepo 解千愁
    realtozf
        7
    realtozf  
    OP
       2021-03-08 14:27:14 +08:00
    @KuroNekoFan
    哦豁,我研究研究看看是否适用
    br_wang
        8
    br_wang  
       2021-03-08 17:10:58 +08:00   1
    对于一个组件库,「从确定需求->开发->其他项目集成->发布版本」中间的「其他项目集成」这步是指啥?其实你是想组件库发布和业务项目发布耦合在一起?还是仅仅是有个验证项目确保组件库更新的正确性?

    基本上组件库除了单测外,都会有个 portal 或者 storybook 项目用来开发验证或展示用法。
    realtozf
        9
    realtozf  
    OP
       2021-03-08 17:45:50 +08:00
    @br_wang
    毕竟不是大厂,没有那么多时间人力去搞...;

    基本上就是有几个项目都有的共性需求,然后封装,在第一个版本封装的过程中,肯定是有个真实的项目去配合使用,并结合业务场景去提出问题改进;
    每次版本的开发肯定是需要有业务项目一起耦合;
    毕竟,内部的组件如果没有业务项目去使用,开发新版本就是在浪费人力
    br_wang
        10
    br_wang  
       2021-03-08 18:21:59 +08:00   1
    @realtozf 也可以从业务项目向公共库抽取吧。这样可能质量和使用场景更有把控一些。支持当前项目后再向其他业务项目的场景扩展。

    不然,先公共后业务,除非在开发前跟各方充分讨论,不然很容易产出脱离具体使用场景的「公共组件」。
    xuanbg
        11
    xuanbg  
       2021-03-08 21:13:29 +08:00
    snapshot 每次更新版本号,然后项目不锁版本不行吗?
    realtozf
        12
    realtozf  
    OP
       2021-03-08 22:55:48 +08:00
    @br_wang
    偏题了,一开始肯定是在业务项目里面开发好的;
    然后其他项目有类似需求,这时候需要抽取出来,做扩展功能;
    我这个问题就是想问问,这种抽取公共库的整个过程,有没有什么最佳实践
    尤其是配合 CI 来做

    @xuanbg
    我也希望不锁版本啊,陈年老产品的升级迭代有多难啊
    kongkx
        13
    kongkx  
       2021-03-11 01:06:39 +08:00 via iPhone
    听起来有点像 猪齿鱼 这个项目的集成方式。有点像 nightly build 的感觉。做个 cron ? ci install 前 先删除 lock ? 不过 package.json 要严格指明版本。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5572 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 02:07 PVG 10:07 LAX 18:07 JFK 21:07
    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