CommonJs規範詳解---【XUEBIG】

 CommonJS是服務器模塊的規範,Node.js採用了這個規範
 
一、CommonJs規範的出發點:JS沒有模塊系統、標準庫較少、缺少包管理工具;爲了讓JS能夠在任何地方運行,以達到Java、C#、PHP這些後臺語言具有開發大型應用的能力;
 
二、在CommonJs規範中:
    一個文件就是一個模塊,擁有單獨的做用域;
    普通方式定義的變量、函數、對象都屬於該模塊內;
    經過require來加載模塊;
    經過exports和modul.exports來暴露模塊中的內容;
 1.module.exports屬性
module.exports屬性表示當前模塊對外輸出的接口,其餘文件加載該模塊,實際上就是讀取module.exports變量。
 
  2.exports變量
node爲每個模塊提供了一個exports變量(能夠說是一個對象),指向 module.exports。至關於在模塊頭部加了這句話:var exports = module.exports,在對外輸出時,能夠給exports對象添加方法,PS:不能直接賦值(由於這樣就切斷了exports和module.exports的聯繫);
 
注【若是兩個很差區分,那就放棄 exports,用 module.exports 就好。。。】

 

三、全部代碼都運行在模塊做用域,不會污染全局做用域;
    模塊能夠屢次加載,但只會在第一次加載的時候運行一次,而後運行結果就被緩存了,之後再加載,就直接讀取緩存結果;
    模塊的加載順序,按照代碼的出現順序是同步加載的;
 
四、__dirname表明當前模塊文件所在的文件夾路徑,__filename表明當前模塊文件所在的文件夾路徑+文件名;
 
五、require(同步加載)基本功能:讀取並執行一個JS文件,而後返回該模塊的exports對象,若是沒有發現指定模塊會報錯;
(1)若是參數字符串以「/」開頭,則表示加載的是一個位於絕對路徑的模塊文件。好比,require('/home/job/job.js')將加載/home/job/job.js。 (2)若是參數字符串以「./」開頭,則表示加載的是一個位於相對路徑(跟當前執行腳本的位置相比)的模塊文件。好比,require('./user')將加載當前腳本同一目錄的user.js。
(3)若是參數字符串不以「./「或」/「開頭,則表示加載的是一個默認提供的核心模塊(位於Node的系統安裝目錄中),或者一個位於各級node_modules目錄的已安裝模塊(全局安裝或局部安裝)。 (4)若是參數字符串不以「./「或」/「開頭,並且是一個路徑,好比require('example-module/path/to/file'),則將先找到example-module的位置,而後再以它爲參數,找到後續路徑。 (5)若是指定的模塊文件沒有發現,Node會嘗試爲文件名添加.js、.json、.node後,再去搜索。.js件會以文本格式的JavaScript腳本文件解析,.json文件會以JSON格式的文本文件解析,.node文件會以 編譯後的二進制文件解析。 (6)若是想獲得require命令加載的確切文件名,使用require.resolve()方法。

 

六、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 鏡像源,來切換;
相關文章
相關標籤/搜索