1. 程式人生 > >CommonJs規範詳解---【XUEBIG】

CommonJs規範詳解---【XUEBIG】

reg 內容 切換 port 變量 com require use 第一次

CommonJS是服務器模塊的規範,Node.js采用了這個規範 1、CommonJs規範的出發點:JS沒有模塊系統、標準庫較少、缺乏包管理工具;為了讓JS可以在任何地方運行,以達到Java、C#、PHP這些後臺語言具備開發大型應用的能力; 2、在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 就好。。。 3、所有代碼都運行在模塊作用域,不會汙染全局作用域; 模塊可以多次加載,但只會在第一次加載的時候運行一次,然後運行結果就被緩存了,以後再加載,就直接讀取緩存結果; 模塊的加載順序,按照代碼的出現順序是同步加載的; 4、__dirname代表當前模塊文件所在的文件夾路徑,__filename代表當前模塊文件所在的文件夾路徑+文件名; 5、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()方法。 6、npm root -g:查看npm全局包安裝位置,建議在nvm目錄下新建npm\node_modules目錄,然後設置npm的全局包安裝位置:npm config set prefix "",然後將該路徑添加到環境變量中; 7、npm init -y:初始化一個package.json文件,加上-y就會默認生成該文件,無需一步一步填寫;npm docs 包名:查看包的文檔;npm install:安裝package.json中dependencies屬性中所有依賴的包 8、由於npm的服務器是國外的,所以如果你沒有和諧工具是下載不了的,這裏推薦使用淘寶NPM鏡像:http://npm.taobao.org/,與官方NPM的同步頻率目前為10分鐘一次;安裝命令:npm install -g cnpm --registry=https://registry.npm.taobao.org,安裝包:cnpm install 包名(其它命令基本一致); 9、如果你不想下載cnpm,npm還提供了一個鏡像源管理工具:npm install -g nrm,通過:nrm ls,查看鏡像源列表 ,通過:npm use 鏡像源,來切換;

CommonJs規範詳解---【XUEBIG】