1、CommonJs規范的出發點:JS沒有模塊系統、標准庫較少、缺乏包管理工具;為了讓JS可以在任何地方運行,以達到Java、C#、PHP這些后台語言具備開發大型應用的能力;
2、在CommonJs規范中:
一個文件就是一個模塊,擁有單獨的作用域;
普通方式定義的變量、函數、對象都屬於該模塊內;
通過require來加載模塊;
通過exports和modul.exports來暴露模塊中的內容;
3、所有代碼都運行在模塊作用域,不會污染全局作用域;模塊可以多次加載,但只會在第一次加載的時候運行一次,然后運行結果就被緩存了,以后再加載,就直接讀取緩存結果;模塊的加載順序,按照代碼的出現順序是同步加載的;
4、__dirname代表當前模塊文件所在的文件夾路徑,__filename代表當前模塊文件所在的文件夾路徑+文件名;
5、require(同步加載)基本功能:讀取並執行一個JS文件,然后返回該模塊的exports對象,如果沒有發現指定模塊會報錯;
6、模塊內的exports:為了方便,node為每個模塊提供一個exports變量,其指向module.exports,相當於在模塊頭部加了這句話:var exports = module.exports,在對外輸出時,可以給exports對象添加方法,PS:不能直接賦值(因為這樣就切斷了exports和module.exports的聯系);
7、npm root -g:查看npm全局包安裝位置,建議在nvm目錄下新建npm\node_modules目錄,然后設置npm的全局包安裝位置:npm config set prefix "",然后將該路徑添加到環境變量中;
8、npm init -y:初始化一個package.json文件,加上-y就會默認生成該文件,無需一步一步填寫;npm docs 包名:查看包的文檔;npm install:安裝package.json中dependencies屬性中所有依賴的包
9、由於npm的服務器是國外的,所以如果你沒有和諧工具是下載不了的,這里推薦使用淘寶NPM鏡像:http://npm.taobao.org/,與官方NPM的同步頻率目前為10分鍾一次;安裝命令:npm install -g cnpm --registry=https://registry.npm.taobao.org,安裝包:cnpm install 包名(其它命令基本一致);
10、如果你不想下載cnpm,npm還提供了一個鏡像源管理工具:npm install -g nrm,通過:nrm ls,查看鏡像源列表 ,通過:npm use 鏡像源,來切換;
11、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).如果繼續失敗,則拋出異常