一、CommonJs規範的出發點:JS沒有模塊系統、標準庫較少、缺少包管理工具;爲了讓JS能夠在任何地方運行,以達到Java、C#、PHP這些後臺語言具有開發大型應用的能力;node
二、在CommonJs規範中:npm
一個文件就是一個模塊,擁有單獨的做用域;json
普通方式定義的變量、函數、對象都屬於該模塊內;數組
經過require來加載模塊;緩存
經過exports和modul.exports來暴露模塊中的內容;服務器
三、全部代碼都運行在模塊做用域,不會污染全局做用域;模塊能夠屢次加載,但只會在第一次加載的時候運行一次,而後運行結果就被緩存了,之後再加載,就直接讀取緩存結果;模塊的加載順序,按照代碼的出現順序是同步加載的;函數
四、__dirname表明當前模塊文件所在的文件夾路徑,__filename表明當前模塊文件所在的文件夾路徑+文件名;工具
五、require(同步加載)基本功能:讀取並執行一個JS文件,而後返回該模塊的exports對象,若是沒有發現指定模塊會報錯;ui
六、模塊內的exports:爲了方便,node爲每一個模塊提供一個exports變量,其指向module.exports,至關於在模塊頭部加了這句話:var exports = module.exports,在對外輸出時,能夠給exports對象添加方法,PS:不能直接賦值(由於這樣就切斷了exports和module.exports的聯繫);spa
七、npm root -g:查看npm全局包安裝位置,建議在nvm目錄下新建npm\node_modules目錄,而後設置npm的全局包安裝位置:npm config set prefix "",而後將該路徑添加到環境變量中;
八、npm init -y:初始化一個package.json文件,加上-y就會默認生成該文件,無需一步一步填寫;npm docs 包名:查看包的文檔;npm install:安裝package.json中dependencies屬性中全部依賴的包
九、因爲npm的服務器是國外的,因此若是你沒有和諧工具是下載不了的,這裏推薦使用淘寶NPM鏡像:http://npm.taobao.org/,與官方NPM的同步頻率目前爲10分鐘一次;安裝命令:npm install -g cnpm --registry=https://registry.npm.taobao.org,安裝包:cnpm install 包名(其它命令基本一致);
十、若是你不想下載cnpm,npm還提供了一個鏡像源管理工具:npm install -g nrm,經過:nrm ls,查看鏡像源列表 ,經過:npm use 鏡像源,來切換;
十一、NPM的模塊加載機制:
若是require的是絕對路徑文件,查找不會去遍歷每一個node_modules目錄,其速度最快
1).從module.paths數組中(由當前執行文件目錄到磁盤根目錄)取出第一個目錄做爲查找基準
2).直接從目錄中查找該文件,若是存在則結束查找,若是不存在則進行下一條查找
3).嘗試添加.js、.node、.json後綴以後查找,若是存在文件則結束查找,若是不存在則進行下一條查找
4).嘗試將require的參數做爲一個包來進行查找,讀取目錄下的package.json文件,取得Main參數指定的文件
5).嘗試查找該文件,若是存在則結束查找,若是不存在則進行第3條查找
6).若是繼續失敗,則取出module.paths數組中的下一目錄做爲基準查找,循環第1-5個步驟
7).若是繼續失敗,循環第1-6個步驟,直到module.paths中的最後一個值
8).若是繼續失敗,則拋出異常