- 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 |
吐血