npm 这种辣鸡玩意儿浑身都充满了各种不合理,为何这么多年还没被取代? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mokeyjay
V2EX    Node.js

npm 这种辣鸡玩意儿浑身都充满了各种不合理,为何这么多年还没被取代?

  •  
  •   mokeyjay 2018 年 4 月 12 日 10932 次点击
    这是一个创建于 2889 天前的主题,其中的信息可能已经有所发展或是发生改变。

    甚至看不到 npm 官方有任何要改进的意思,例如抢包名的依旧在抢包名

    我不禁陷入了沉思

    是否意味着这届程序员不行(滑稽

    47 条回复    2018-04-17 12:51:06 +08:00
    crysislinux
        1
    crysislinux  
       2018 年 4 月 12 日 via Android
    说明没啥好办法啊
    muziki
        2
    muziki  
       2018 年 4 月 12 日 via iPhone
    yarn 试试?
    mokeyjay
        3
    mokeyjay  
    OP
       2018 年 4 月 12 日
    @crysislinux #1 解决方法有很多,但 npm 官方并不作为
    @muziki #2 yarn 看起来是个好东西,不过似乎比较少看到有人用 /提起
    bullettrain1433
        4
    bullettrain1433  
       2018 年 4 月 12 日
    yarn 啊
    SakuraKuma
        5
    SakuraKuma  
       2018 年 4 月 12 日
    所以产生了 yarn。然后 npm 又学起了 yarn。
    可惜已经太晚了,很多人跑去 yarn 了。
    fengyj
        6
    fengyj  
       2018 年 4 月 12 日 via Android
    npm 占包名是没办法啦,但是没有像域名那样恶意,可是因为多了,有包名也没办法啊,就像你注册一个网站的昵称,被抢了也没办法啦。
    所以你会发现现在越来越多的包以 @.../命名了。哎,这也没办法啊。
    不过官方有时候确实不作为。
    mokeyjay
        7
    mokeyjay  
    OP
       2018 年 4 月 12 日
    @huiyifyj #6 并不是没办法,这个很好解决啊,前面加用户名不就好了。例如 php 的 composer 就是 “ github 用户名 /repo 名” 来作为包名的,完美解决冲突
    fengyj
        8
    fengyj  
       2018 年 4 月 12 日
    @mokeyjay #7 对啊,所以越来越多人以 @username/开头啊。
    我觉得包名应该允许转移也好一点。
    grewer
        9
    grewer  
       2018 年 4 月 12 日
    除了抢包名,楼主详细说下其他不合理的地方啊,光是一味地说垃圾是没用的
    doubleflower
        10
    doubleflower  
       2018 年 4 月 12 日
    光瞎 bb 了哪个不合理你列几个出来?
    mooo
        11
    mooo  
       2018 年 4 月 12 日
    @mokeyjay 现在好的都用 @了,比如新的 babel 就是用 @组织 /XXX 作为包名的。 用 github 用户名的话 npm 不一定要发布的 github 上吧。
    Eoss
        12
    Eoss  
       2018 年 4 月 12 日 via iPhone
    楼主具体列下哪些不合理呗。
    没用过其他包管理工具。列一下学习学习。
    superluckykoo
        13
    superluckykoo  
       2018 年 4 月 12 日 via Android
    已转投 yarn,碰到过 npm 安装依赖包不全,或者新增依赖时删除了其他依赖包,主要是 rn 项目用 npm 出错概率比较大
    qfdk
        14
    qfdk  
    PRO
       2018 年 4 月 12 日 via iPhone
    我感觉还好 目前为止没有碰到什么问题 这种还是靠谱的 别的就算了吧
    SirLostWhite
        15
    SirLostWhite  
       2018 年 4 月 12 日
    第一次搞 npm 搞了一下午
    结果转 yarn 半小时搞定
    yarn 万岁!
    mwVYYA6
        16
    mwVYYA6  
       2018 年 4 月 12 日
    @SirLostWhite 黑的漂亮
    murmur
        17
    murmur  
       2018 年 4 月 12 日
    npm2 那个目录结构超级 sb
    但是 npm3 改成了扁平目录结构
    即便是在 windows 下也不太会出现问题了
    既然没问题干嘛要换
    wenbinwu
        18
    wenbinwu  
       2018 年 4 月 12 日
    眼高手低,有意见提 issue 交 pr 去
    rashawn
        19
    rashawn  
       2018 年 4 月 12 日 via iPhone
    @mokeyjay 已经可以加了
    dumbass
        20
    dumbass  
       2018 年 4 月 12 日 via Android
    充满了 what-the-fuck-is-this-plugin 的模块 2333
    monsterxx03
        21
    monsterxx03  
       2018 年 4 月 12 日 via iPhone
    随手看下 node_modules 里乱七八糟的依赖,发现好多 is-xxx, in-xxx 的模块,主体代码都不超过 5 行....这事从来没在其他语言里看过
    lzvezr
        22
    lzvezr  
       2018 年 4 月 12 日 via Android
    @monsterxx03 left-pad 了解一下?
    lihongjie0209
        23
    lihongjie0209  
       2018 年 4 月 12 日
    因为用 js 的程序员很少接触其他更好的包管理工具, 当没有对比的时候, npm 自然就是完美的
    FrankFang128
        24
    FrankFang128  
       2018 年 4 月 12 日
    因为 JS 程序员觉得 NPM 是完美的~!
    crysislinux
        25
    crysislinux  
       2018 年 4 月 12 日
    其他的包管理也不是没用过,也没比 npm 好到哪儿去。
    msg7086
        26
    msg7086  
       2018 年 4 月 12 日
    Yarn 提起得少?去 Ruby 论坛看看吧,Yarn 都成 Rails 5.1 钦定 JS 包管理工具了。
    LeungJZ
        27
    LeungJZ  
       2018 年 4 月 12 日
    yarn 路过。
    但是好像 `yarn add` 会重新安装一些包。
    反正我的项目就是,迫于无奈,只能改原包中的样式,但是每次 `yarn add` 后,样式又被恢复了。。。
    chinvo
        28
    chinvo  
       2018 年 4 月 13 日 via iPhone
    npm 的 namespace 是付费功能来着
    viko16
        29
    viko16  
       2018 年 4 月 13 日 via Android
    @monsterxx03 库作者用了什么依赖可不是 npm 的锅…
    aipansiyouyun
        30
    aipansiyouyun  
       2018 年 4 月 13 日 via Android
    看成 mmp 了 ,
    crs0910
        31
    crs0910  
       2018 年 4 月 13 日 via Android
    没看明白,说的缺点跟用 yarn 还是 npm 有啥关系
    qiumaoyuan
        32
    qiumaoyuan  
       2018 年 4 月 13 日 via Android
    因为楼主还没开始着手写取代它的产品
    Pastsong
        33
    Pastsong  
       2018 年 4 月 13 日
    @LeungJZ 原包的东西就是不能改,要么项目里覆盖,要么自己 fork,还有就是 postinstall 脚本,不然包管理就没有意义
    Pastsong
        34
    Pastsong  
       2018 年 4 月 13 日
    @chinvo public 免费
    334132462
        35
    334132462  
       2018 年 4 月 13 日
    因为是钦定的
    mritd
        36
    mritd  
       2018 年 4 月 13 日 via iPhone
    说实话,每次弄 node 的 ci 我都怀疑这东西存在的合理性;目前始终不理解:

    为什么一个前端工具动不动就要装 gcc 编译 c++啥的玩意

    都是下载外部依赖 node module 目录为啥不能通用,为啥不能 cache (可能是我没找到)

    为毛线 node module 轻则百兆,动辄上 G

    下载编译过程为啥总要依赖系统工具,譬如 py2 (系统已经有了 py3)

    最不理解的一点就是撸了好几年后端代码,用 npm install 的时候我就没见过没有的项目

    最蒙蔽的就是我发现这玩意好像都不锁版本号,so 不同时间点用同样的命令..... WTF
    julyclyde
        37
    julyclyde  
       2018 年 4 月 13 日
    @mritd 正因为不锁版本号,所以才没法通用 node_modules 目录
    breeswish
        38
    breeswish  
       2018 年 4 月 13 日
    楼主这不典型的喷吗?请先列举一下你觉得不好的地方。

    @mritd 系统有了 py3 还需要下个 py2 的原因心里还不清楚吗 :) 这两货又不通用。当然,blame node-gyp 没有升级到 py3。
    ly529
        39
    ly529  
       2018 年 4 月 13 日
    进了帖子才发现 ve2x 可以这么酷炫
    doubleflower
        40
    doubleflower  
       2018 年 4 月 13 日
    @lihongjie0209 什么叫当没有对比的时候 npm 是好的,我就没见过更好的
    lihongjie0209
        41
    lihongjie0209  
       2018 年 4 月 13 日
    @doubleflower #40 见识少不是你的错, 但是你那拿出来炫耀就不对了
    Clarencep
        42
    Clarencep  
       2018 年 4 月 13 日
    @mritd
    @julyclyde npm 5.x package-lock.json 可以了解下。


    @LeungJZ 没有哪个包管理会允许你直接修改包的内容的。你应该 fork 一份再自己改。然后 webpack 构建的时候指定 alias。
    Tankpt
        43
    Tankpt  
       2018 年 4 月 13 日
    我猜是应该没找到更好的方案? 所以只能先将就了?
    Cryse
        44
    Cryse  
       2018 年 4 月 13 日 via Android
    最恶心的明明是用来编译的 node-gyp
    LeungJZ
        45
    LeungJZ  
       2018 年 4 月 14 日
    @Clarencep
    @Pastsong
    我知道,但是没办法,包本身没有 自定义的变量文件,只能手动覆盖。
    Miy4mori
        46
    Miy4mori  
       2018 年 4 月 16 日
    很多啊,yarn,cnmp 还有几个其他的记不起名字。这东西要那么高要求干什么,能给我 install 就行了,,要求高可以去写 java,maven,gradle 之类的功能可全了。
    L3au
        47
    L3au  
       2018 年 4 月 17 日 via iPhone
    看下来,node-gyp、不能全局共享 node_modules 很大程度上其实和 Node 设计有关,不是那么好兼容的同时做出大的改变的,包名、小模块、版本默认自动升级等更多是整个 JS 社区生态的现状,是和老牌的包管理工具是有区别,各有各的特点吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5462 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 08:56 PVG 16:56 LAX 01:56 JFK 04:56
    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