很多人不理解 NPM 上 left-pad 这样的模块的意义

2016-03-24 09:48:23 +08:00
 sox
给那些也许还不理解 one-line module 意义的人

https://github.com/sindresorhus/ama/issues/10
11756 次点击
所在节点    Node.js
75 条回复
iwege
2016-03-24 12:02:09 +08:00
@sox

如果你说的是标准函数库的问题,当然是 JS 引擎提供的更多更好,这点我也同意是语言上提供更加舒服,比如 trim 或者最近的 left-pad ,但是也保不齐有兼容性问题,就算是客户端,面对某些兼容性问题的时候也要自己提供 dll ,所以最后你可能为了兼容还是要提供一些标准化的库,当然你可以使用 UA 来判断是否加载。

如果你说的是模块合并最优化,个人觉得是废话,以我肤浅的语言知识,目前没有见过不经过构建就能自己最优化的语言, C 和 Java 也有 gcc 和 javac ,与 JS 不一样的是,服务端和客户端语言可以不用在意体积最优化,而 JS 的执行过程是需要经过用户下载的(暂时不谈缓存和 service worker ),因此体积当中有任何 unused 内容都是对流量的损耗,不然就只能增加请求来减少体积了...
xiongbiao
2016-03-24 12:03:10 +08:00
其实我觉得是 npm 机制的问题
sox
2016-03-24 12:08:26 +08:00
@damngood 你可能并不是 100 个 library 的 author 😂
Sivan
2016-03-24 12:24:39 +08:00
一个引用的包本来就不应该算是自己包的一部分,通过外部依赖解决可以让使用者专注于包本身所实现的功能。
如果每个小包都自己写,势必很多包里都有一套重复性很高的 util 。而别人尝试 debug 时又不得不去研究是否是你自身的基础件实现有问题。
janxin
2016-03-24 12:39:56 +08:00
看来 Python 也需要这个 https://pypi.python.org/pypi/left-pad/
rannnn
2016-03-24 12:45:30 +08:00
根本原因还是 node 没一个像 Apache Commons, Guava 一样的标准库
Pastsong
2016-03-24 12:46:31 +08:00
怎么还有人说标准库的事情啊
cpylua
2016-03-24 12:50:58 +08:00
问题的根源在于 js 没有一个标准库,别的语言有这么多一行的包吗?
sox
2016-03-24 12:58:58 +08:00
说标准库的同学真的看了帖子吗😂
poke707
2016-03-24 13:45:13 +08:00
好处是不用自己维护啊,前提是对这个 package 有信心

即使有标准库,也没可能囊括所有的需求吧。
sox
2016-03-24 13:46:50 +08:00
标准库最后越来越大,变得越来越 bloated 真的好吗 😂
Tonni
2016-03-24 14:30:29 +08:00
> tl;dr You make small focused modules for reusability and to make it possible to build larger more advanced things that are easier to reason about.
lxy
2016-03-24 14:45:17 +08:00
More proof that the Node.js developer community is cancer.
ianva
2016-03-24 15:35:35 +08:00
之前 NPM 3 后随便构建一个项目,点开 node_module 的时候卡了一下, 自习一看,超过 600 个目录。。
100M+ 的大小,真有点过了,不说维护什么的,如果第三方库分散成这样,你找个文档都是个费劲的事
当然这个趋势下去肯定会有个把 node_module 下所有包的文档打包成一个 Dash 的项目出来
hucsmn
2016-03-24 15:49:25 +08:00
看完还是觉得相同领域的 one line module 应该把功能合并到一起,一个小功能对应一个模块名,记忆地太多会把人逼疯的
sox
2016-03-24 15:52:12 +08:00
@lxy this English is that bad
dvorak4tzx
2016-03-24 16:45:49 +08:00
确实。没引入一个新的包,就存在别人更新更残了拖累自己的风险。所以好多情况下,我宁可 fork 别人一份代码用自己的这份,而不是 git clone 他的。就是怕别人更新了……我不知道啊……
sox
2016-03-24 16:59:34 +08:00
@dvorak4tzx 你可以在 package.json 里限定使用哪个版本
youchoudeyu
2016-03-24 17:08:23 +08:00
@dvorak4tzx 你可以选择构建的时候不更新啊,或者去寻找其他的能够代替的包,风险这种东西哪个产品没有,依赖库的风险没有想象的这么严重,就比如你敢说自己的代码百分百完美?要是这样还需要什么测试哦。我个人是支持 npm 这种库管理的模式,每个人都可以自由地提供自己觉得很棒的代码(轮子),至于使用者是否愿意使用这个轮子或者选择其他的轮子都交给对方选择,一个轮子坏了,大不了找另外一个轮子代替嘛,总比自己去选木材造轮子还要判断这个轮子是否标准要省事得多吧。这次事件个人觉得是管理方的错,跟其他的并无关,所以看到上面强行把话题扭到 js/标准库 /模块化 /自己造轮子 的时候感觉真的是醉醉的,就好比一个国家闹了个小事情被人强行放大成一个大新闻,然后一众的人开始找历史根源,剖析社会制度,批判者和支持者争辩不休。冷静一下好么,事情或许没有我们想象得这么复杂。
lightening
2016-03-24 17:40:34 +08:00
@zhujinliang 我的理解是你自己写这样一个函数的话,虽然不难写,但是要在你的代码库里找一个地方来存放,可能还要为它写测试。既然如此,直接 require 一下是最方便的方法了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/265944

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX