哎,前端的包管理有那么一点割裂 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
king888
V2EX    程序员

哎,前端的包管理有那么一点割裂

  •  
  •   king888 2023-03-02 09:38:39 +08:00 6291 次点击
    这是一个创建于 958 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • npm
    • yarn v1
    • yarn v2
    • pnpm

    不同的项目对不同的包管理选择的情况是不同:

    • 可能用户常用的是 pnpm ,但是 a 项目对 pnpm 支持不友好,又或者 b 项目用的 pnpm ,但是用户常用的是 yarn
    • 又或者老项目用的 yarn v1 ,听说 yarn v2 新特性不错想试试,结果我是十有八九都需要手动调整费事费力,直接放弃
    • 新项目当然想用新的包管理,新的特性
    • 综上所述,电脑里不把这些七龙珠集齐都不好意思了
    • 如果对电脑有点洁癖什么,需要自定义全局缓存位置什么的,各个包管理文档配置什么的又要找遍
    • 没有统一的包管理,这么割裂的情况还是比较考验耐心的
    38 条回复    2023-03-03 13:09:48 +08:00
    cheneyzhang
        1
    cheneyzhang  
       2023-03-02 09:44:28 +08:00
    只要运维愿意配合,前端可以做到同一个公司下统一包管理工具的
    GreatAuk
        2
    GreatAuk  
       2023-03-02 09:44:32 +08:00   8
    Use the right package manager: https://github.com/antfu/ni
    theprimone
        3
    theprimone  
       2023-03-02 09:47:37 +08:00
    @GreatAuk 哈哈哈,我在公司安利好久终于不少人用上了
    theprimone
        4
    theprimone  
       2023-03-02 09:48:48 +08:00
    另外 yarn v2 很久以前尝试升级过,各种折腾结果项目都起不来,索性没碰过了。
    renmu
        5
    renmu  
       2023-03-02 09:52:27 +08:00 via Android
    项目下是哪个 lock 就跑哪个,能跑起来就行
    wangtian2020
        6
    wangtian2020  
       2023-03-02 09:53:47 +08:00
    一直用 npm ,配合 nrm 设置 proxy ,没啥体验问题
    bjfane
        7
    bjfane  
    PRO
       2023-03-02 10:08:33 +08:00
    @GreatAuk ni 只是解决命令的问题,对我来说各种工具命令没什么 仓库有好几个在我的 ssd 上 我就想吐。

    顺便说一下 pnpm 在 6 ~ 7 版本改过默认路径,有可能你的电脑上 pnpm store 有两个,
    macos 的话 /Users/xxxx/.pnpm-store 老路径
    /Users/xxx/Library/pnpm/store/v3 新路径
    gam2046
        8
    gam2046  
       2023-03-02 10:18:10 +08:00
    VS Code Remote in Container 可以变相的解决这个问题。毕竟都相互隔离开了。
    hhjswf
        9
    hhjswf  
       2023-03-02 10:43:07 +08:00 via Android   2
    前端娱乐圈
    cmdOptionKana
        10
    cmdOptionKana  
       2023-03-02 10:53:09 +08:00
    这算割裂?好歹还是围绕 js/ts ,一共也就这么几个东西。后端呢?后端光是语言就几十种,主流的也有近 10 种,每种语言又可能有多种包管理。

    如果因此就说前端是娱乐圈,那后端是啥?
    jqtmviyu
        11
    jqtmviyu  
       2023-03-02 10:55:03 +08:00
    现在一般不用 yarn 了, npm 后来不也支持扁平树 /离线安装 /lockfile 了吗?
    有什么特性是 yarn 显著比 npm 领先的吗?
    能用 pnpm 就 pnpm, 不能就 npm
    dcsuibian
        12
    dcsuibian  
       2023-03-02 10:57:29 +08:00   1
    前端一般是:这个库已经烂了,别维护了,另开个新的吧
    9ki
        13
    9ki  
       2023-03-02 10:58:34 +08:00
    确定蛋疼, 但是不可否认的是每个技术都有其解决的痛点, 其实普通开发者会 `npm install` 和 `yarn` 完全足够了, 其他的技术当你需要他的时候再去使用也不迟.

    不过就像楼主说的, 每个包管理器缓存很难管理, 特别是我这种就 256G 储存空间, 每月都要手动清理一次.
    xqk111
        14
    xqk111  
       2023-03-02 11:16:42 +08:00
    都用过,还在回到 npm ,兼容性好点,
    xqk111
        15
    xqk111  
       2023-03-02 11:17:54 +08:00
    @9ki pnpm 设计就是解决这个问题,我现在电脑里也是一大堆 node_modules ,npm 设计之初可能没考虑到这个事情吧
    vivipure
        16
    vivipure  
       2023-03-02 11:28:24 +08:00
    用 pnpm 把,比较省空间。
    mmc
        17
    mmc  
       2023-03-02 11:36:29 +08:00   8
    我觉得好的包管理器应该是安装时可以很顺畅,可以直接拉编译好的二进制文件,而不是用我的电脑在跑一次编译。每次看到旧项目,想要试一下,npm install 突然来个要编译的包,要装各种库,最后编译还崩溃了,说的就是你:node-sass!
    king888
        18
    king888  
    OP
       2023-03-02 12:07:02 +08:00
    @cmdOptionKana
    就拿前端的包管理跟 golang 的对比吧,别人说娱乐圈,是有道理的
    wu67
        19
    wu67  
       2023-03-02 12:18:37 +08:00
    npm 大法好. 包管理各种层出不穷, 什么 cnpm yarn pnpm, 但是你看 npm 退出舞台了吗?
    yinzhili
        20
    yinzhili  
       2023-03-02 13:31:30 +08:00   1
    @cmdOptionKana 前端写好项目,过个两年后再去编译时,出错的概率非常高,后端显然没有这么恶心的问题
    duan602728596
        21
    duan602728596  
       2023-03-02 13:33:08 +08:00
    锁定包管理器,请用 corepack: https://github.com/nodejs/corepack
    关于 node-sass ,官方已经警告废弃了,并且已经推荐了好几种方案,包括迁移到 sass ,配置各种参数等: https://github.com/sass/node-sass#binary-configuration-parameters ,几分钟就能搞定的东西。
    DKburNIng
        22
    DKburNIng  
       2023-03-02 14:02:38 +08:00
    @duan602728596 几分钟我连这个 readme 都看不完
    Jirajine
        23
    Jirajine  
       2023-03-02 14:05:57 +08:00
    @GreatAuk 这玩意的别名搞太多,和很多命令冲突了。
    nix 和 nu 都是已有的程序。
    HugoChao
        24
    HugoChao  
       2023-03-02 14:09:01 +08:00
    用着都大差不差
    eryajf
        25
    eryajf  
       2023-03-02 14:46:12 +08:00
    @yinzhili 对于这个说法比较能感同身受,同类的还有 Python ,之前就是因为安装过几个 Python 的开源项目,给折腾怕了
    weijancc
        26
    weijancc  
       2023-03-02 15:00:15 +08:00
    @wu67 npm 是默认的肯定使用范围最广, 没了解过其他的就别发言.
    learningman
        27
    learningman  
       2023-03-02 15:01:27 +08:00
    不错了,至少这一堆都能读 package.json
    反面样例参考 C++
    horou
        28
    horou  
       2023-03-02 16:56:02 +08:00
    我觉得 yarn3 挺好的,速度快,省存储,就是别的很多项目用不了,我自己的项目到是挺顺畅的。
    Justin13
        29
    Justin13  
       2023-03-02 17:38:46 +08:00 via Android
    我只想用 npn,奈何。。。
    salmon5
        30
    salmon5  
       2023-03-02 18:09:53 +08:00
    @cheneyzhang #1 和运维有个毛关系
    justin2018
        31
    justin2018  
       2023-03-02 18:12:19 +08:00
    老哥们 有啥靠谱的 node_modules 清理工具

    求推荐
    um1ng
        32
    um1ng  
       2023-03-02 19:44:40 +08:00
    运维应该只配置 npm 的
    um1ng
        33
    um1ng  
       2023-03-02 19:56:52 +08:00
    @GreatAuk antfu 的好东西
    Lqxc
        34
    Lqxc  
       2023-03-02 22:28:19 +08:00 via Android
    可以使用 nix 解你的
    lete
        35
    lete  
       2023-03-02 23:18:11 +08:00
    我一直都是用 npm+mini-nrm ,反正 npm YYDS 就对了,pnpm 节省空间?我又不缺空间
    adoyle
        36
    adoyle  
       2023-03-03 00:32:16 +0:00
    你可以用 corepack 解决你的问题。node 14.19.0 和 v16.9.0 起就自带了 corepack ,之前的版本可以通过 `npm install -g corepack` 安装。
    你可以在 Docker 容器里运行 corepack 来安装项目依赖,这样就不污染本机开发环境了。
    Gav1nw
        37
    Gav1nw  
       2023-03-03 00:50:26 +08:00
    不过我记得 yarn 只是优化 NPM 当年不能多线程的问题吧,最终还是下载到 node_module 文件夹呀
    iulo
        38
    iulo  
       2023-03-03 13:09:47 +08:00
    @justin2018 npkill
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3152 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 00:33 PVG 08:33 LAX 17:33 JFK 20:33
    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