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

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

  •  
  •   mokeyjay · 2018-04-12 15:54:05 +08:00 · 10371 次点击
    这是一个创建于 2416 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    我不禁陷入了沉思

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

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

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

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

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

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

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

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

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


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