首先,没有“必须”读的源代码(我发现我特喜欢说首先……),因为读源代码不是做功课,只有用到或是非常好奇才会去读,当成“日常”去做是没有意义的。
当然有些人会说 xxx 是经典,任何人读过都可以收获很多知识和技巧。我不否认那些经典,但是我很怀疑“任何人”的数量到底占“感兴趣”的人多少?我的意思是,兴致勃勃开始读的人绝对很多,但能从里面学到点什么的人就很少了。
不知道别人怎么看待读源码这件事情,我个人读源码的时间并不多,基本上只有三种原因会促使我去读源码:
- 读到描述不清的文档的时候,或者对文档的描述有疑问的时候;
- 因工作需要不得不去弄清代码的细节的时候,有时候是因为调试,有时候是因为二次开发等等;
- 为开源项目做贡献或打算编写扩展的时候;
可以看出我读源码的目的性都很强,泛泛而读的时候也有过,但通常都没什么收获就困了……只有抱着明确的目的去读源码的时候才会有收获,而且必须得有收获否则目的无法达成。另外,目的达成就收工,若有兴趣继续读也会把它先搁下,因为吃多了消化不好。
还有,我很少很少去读框架的源代码,唯一认真读多且比较多比较深入的只有 Rails 和 Ember,并且都是基于上述原因才去读的。我在回答的问题的时候经常引用源代码,但基本上都不是预先读过,而是碰到了问题才去读的。读懂了就回答,不懂就罢。不读框架源代码的主要原因是框架中的多数代码都是“匠气有余而匠心不足”(这是可以理解的,并非批判),真正精彩的部分在框架型项目里往往只占很小的部分,而为了找到并钻研这些部分却要花费大量的时间,个人觉得性价比偏低。
我喜欢那些匠心独运但又不炫技,可读性非常好却又能让人经常“啊哈!”的代码。在 JavaScript 的领域里,首推 TJ Holowaychuk 的各种项目,它们都具有我说的那些优点:
- 高可读性
- 结构优秀,小巧而丰富,代码平实精炼,不炫技
- 注重文档
- 测试完备
在 https://github.com/tj 这里可以找到它们,另外注意他所属的各种组织,如 koa、express 等等,都有他贡献的许多代码。不过现在他已经把兴趣移到 Go 上去了,唯一还在维护的 JavaScript 项目只剩下 koa.js(外加其周边,如 co 等项目)。
国人在 Github 上的活跃度不算太高,主要大多数人都忙于内部项目,少数提炼的比较精致值得开源的项目也往往受制于条件限制而只能在小范围内传播。前两天刚读过一个项目,写得不错:https://github.com/army8735/jsdc
顺藤摸瓜,你可以通过这个项目找到一些活跃者,然后去翻他们的 repos 吧。
我觉得underscore可以读一读
至于jquery什么的奇淫技巧太多了
Backbone或者它的轻量版Exoskeleton 它教你怎么写框架,怎么组织业务逻辑
jQ读不动的话可以考虑读读Zepto 它教你怎么搞定DOM,附赠Ajax
楼上有人提过的Underscore不错,但未来似乎是属于lodash的 它教你怎么摆平复杂数据结构
最后,虽然不是一个具体的项目,但Github Trending值得你关注,它告诉你最新最酷的项目是什么
Slide
作者在 readme 寫到:
應該把 Slide 當作一個示例,它演示了如何編寫自己的工作流控制工具。如果沒有親手寫過工作流控制庫,就永遠不會真正地瞭解它。
我先說:http://stackoverflow.com/questions/6638518/good-opensource-js-project-for-learning
不過是三年前的了。另如果誰知道國人寫的優秀開源 js 項目,也歡迎推薦。
不过值得一读的东西倒是挺多的。楼上给的那个列表貌似都是很大的 library/framework,那我就来两个身材很小、功能很具体的专用 library 好了。
https://github.com/gorhill/Javascript-Voronoi
http://sandbox.scriptiny.com/tinybox2/
https://github.com/Modernizr/Modernizr
另外,在 general library 里面,我推荐先读 Underscore,同样是因为比较轻,并且结构清晰,功能很有用。