Node.js簡要小總結
Node.js簡要小總結
Node.js簡要小總結
node是什么?
node.js模塊系統
概要
關鍵知識點梳理
核心模塊和文件模塊
模塊間函數和變量無法訪問到的原因
function(exports,require,module,__filename,__dirname)簡要理解
exports和module.exports的區別
為什么會有這樣的差別?
怎樣理解?
包和NPM
什么是包(package)?
NPM
node是什么?
node完整的名字是node.js,顧名思義,以js為后綴名那就多少與javascript有點關系。簡單的說,Node.js是運行在服務端的JavaScript。
是一個事件驅動I/O服務端JavaScript環境,基于V8引擎執行JS。
node.js模塊系統
概要
node.js提供模塊系統目的是讓node.js的文件可以相互調用
簡要的說一個node.js文件就是一個模塊(模塊和文件是一一對應的)
文件不一定就是JavaScript代碼,也可以是JSON文件或者C/C++擴展(編譯過的)
模塊可以分為核心模塊和文件模塊
模塊間的變量和函數在其他模塊無法訪問到,每個JS文件代碼都獨立運行在一個函數中
關鍵知識點梳理
核心模塊與文件模塊在來源、標識和導入方式上有所區別:
node.js的每一個模塊都會包裝到一個函數中執行:
function (exports, require, module, __filename, __dirname){ //編寫的模塊代碼 }
如上:在test模塊中編寫代碼console.log(arguments.callee +'');,在main.js中引入并執行得到上圖輸出結果,得證被引入模塊的變量和函數無法被訪問到的原因是模塊在執行時會被包裝到一個函數中,相當于引入了一個函數,變量為局部變量,故而不能被訪問到。
exports:用來將變量或函數暴露到外部
require:函數,用來引用外部的模塊,引入模塊后會返回一個對象,改對象代表引入得那個模塊
module:代表當前模塊本身,exports是module的一個屬性
__filename:當前模塊的完整路徑
__dirname:當前模塊所在文件夾路徑,(__filename的上一級目錄)
exports和module.exports都可以將變量暴露到外部,但方法上有所不同:
exports暴露:方法為:exports.變量名=值;如:exports.num1=10
module.exports:
module.exports.變量名=值
module.exports={變量1=值,變量2=值}
首先需要理解什么是引用變量,然后最關鍵的一句話是:exports其實是module.exports的一個引用即:
var exports = module.exports;
exports 只是一個變量(類似C語言中的指針的概念),在棧中存儲。而module.exports則是對象實體,在堆中存在。簡單說,好比一個倉庫,你要往倉庫里放東西,如果你知道倉庫在哪直接去放就可以,如果不知道在哪,就可以讓exports領著你去倉庫。至于exports為什么不能直接賦予一個對象就顯而易見了——人家只是領著你去倉庫的,你把東西交給他就好比你給他說這個就是新倉庫的地址(如果可以的話),人家領路的本來放的是去倉庫的路線,硬生生的被搞沒了。
包相當于一個整合的模塊,將一組相關的模塊組合到一起形成一個包。包的組成主要有:
package.json json格式文件,稱為包描述文件,描述包的相關信息供外部分析,類似說明書的存在。
bin :目錄,存放可執行二進制文件
lib :目錄,存放js代碼
doc:目錄,存放文檔
test:目錄,存放單元測試文件
npm:(Node.js package manager)Node.js包管理工具;通俗講類似生活中的應用商店,只不過應用商店的界面和其中的應用都稍微抽象了點。
cnpm:cnpm是淘寶npm鏡像,主要是解決國內使用npm訪問速度的問題,需要注意cnpm是只讀的,即不可以上傳發布,且對npm的同步頻率為十分鐘一次。
關于更多npm詳情請訪問官網:
npm 包管理器簡介:http://nodejs.cn/learn/an-introduction-to-the-npm-package-manager
JavaScript Node.js
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。