Node.js[1] 俯瞰NPM
- Node.js[5] connect & express简介
- Node.js[4] 第一个模块
- Node.js[3] 俯瞰API (整理中)
- Node.js[2] Hello Node
- Node.js[1] 俯瞰NPM
- Node.js[0] 简介
上篇提到,node本身只提供实现应用程序的精简api集合。NPM(Node Packaged Module,以下简称模块)是node内置功能,目的在于让node具有可扩展性。本文不深入讲解模块的实现细节,会在后续《第一个node模块》中详述;下文详细介绍NPM Registry的模块现状。
这篇文章用到的数据如无特指,均来自2012-11-18
Nodejs.org
先简单了解下nodejs.org的各个子页面(或子站点):
- Homepagenode官网主页,简介+demo
- Download各平台node安装包下载页
- About node简介,推荐底部的slide JsConf2009,JsConf2010
- NPM RegistryNPM库
- DocsAPI文档
- Blog目前就是个node更新日志列表
- Community node社区入口,分类罗列了各种资源
概念上应该将NPM放在Community内;单列出来,可以看到NPM在node生态环境中的重要地位。事实也是如此,没有NPM就没有node的今天,这话一点不假;只有Ryan一个人的努力,就算能把node写得天花烂醉,也不可能把如此庞大丰富的NPM库写出来。
NPM Registry
NPM Registry(NPM库)提供模块的查询、数据统计、评论等功能。评论需要登陆,命令行首次使用npm publish时按照提示注册(详细使用方法请参见NPM docs);也可以在这个站点注册。
数据统计
NPM Registry首页就是一堆模块统计列表(暂且叫榜单)构成的。从上至下依次列出了:
- 模块历史下载记录(Node Packaged Modules)
- 最近上传模块(Recently Updated),每个模块都有亮相的机会,很温馨!
- 最多依赖模块(Most Depended Upon)
- 最受欢迎模块(Most Starred)
- 最高产作者(Most Prolific Authors)
最多依赖模块和最受欢迎模块是衡量模块质量的2个重要榜单;这里面的部分模块也会在后续文章中反复提到;“最高产作者”中的tjholowaychuk(以后多用TJ简称,connect、express、jade、mocha等一堆高质量模块的作者)、isaacs等今后也会多次提及。
通过看这些榜单,可以对node有直接的感受;以最多依赖模块为例:
- 1698 underscore util库,Backbone.js项目的一部分
- 1033 request Http request method
- 1002 async 用同步的代码风格写异步代码
- 935 coffee-script
- 832 express 轻量Web App Framework,基于connect
- 812 optimist 命令行辅助
- 634 commander 命令行辅助
- 571 colors 命令行着色辅助
- 436 uglify-js 压缩
- 421 connect Http Server中间件库
单从这份榜单就能看到各种util、app框架、编译器等,种类繁多。
模块分类
NPM Registry已经有接近18000个模块,要想完整的做一个分类显然力不从心,这里仅参考最多依赖模块top100。类别比较难定,暂定为2级,诸君有好的分类方法请指教。
类别1 | 类别2 | 模块 |
通用库 | JS语言扩展 | underscore xml2js lodash moment underscore.string jquery sprintf minimatch hook.io browserify eventemitter2 cheerio validator canvas requirejs traverse dateformat |
JS流程控制 | async q step seq | |
模板类 | jade ejs mustache handlebars js-yaml hogan.js eco | |
CSS | less stylus nib | |
命令行辅助 | optimist commander colors nopt nconf prompt cli nomnom cli-color | |
调试辅助 | debug winston eyes jsdom | |
部署 | uglify-js grunt clean-css jshint | |
其他 | coffee-script node-uuid mime pkginfo semver marked npm sax esprima through growl htmlparser superagent | |
IO库 | 网络IO | request connect socket.io oauth qs formidable nodemailer http-proxy passport-oauth ws restler socket.io-client node-static dnode passport |
本地IO | wrench glob mkdirp rimraf watch findit event-stream log4js bindings temp fstream | |
数据库IO | redis mongodb mongoose mysql hiredis knox pg | |
框架 | 应用框架 | express backbone |
测试框架 | mocha qunit vows should nodeunit |
吐血