目標(biāo)
終極目標(biāo)是讓大家對(duì)node(主要如何開發(fā)c++插件)有一個(gè)快速完整的認(rèn)識(shí)
示例
需要安裝編譯c++文件為node可以使用的.node文件留储。 node-gyp
python安裝 mac自帶
官網(wǎng)demo款筑。
nodejs源碼簡(jiǎn)單分析
benchmark : 一些nodejs 性能測(cè)試 代碼
build:編譯nodejs 生成文件夾
deps:nodejs依賴 的工具包。包含 v8、http_parser裸违、opensslzlib千扶、zlib勉抓、uv
doc:文檔
lib:包括JavaScript源代碼
src:包括C++源代碼
test:測(cè)試代碼
tools:編譯時(shí)用到的工具
這里我們僅僅需關(guān)注 src 和lib 目錄
開發(fā)node插件流程
新建c++ 文件.cc .h文件
node-gyp打包.cc源文件
js引用骇吭,調(diào)用
node基礎(chǔ)(關(guān)于開發(fā)插件的)
基本概念
node.js實(shí)際上就是一個(gè)用c++完成的程序,他之所以能夠?qū)崿F(xiàn)javascript,是因?yàn)樗牡讓又饕膬刹糠值谌綆?kù)岩睁,chrome V8和 libuv钞脂。
chrome v8是javascript運(yùn)行時(shí),用來(lái)解析執(zhí)行javascript代碼
libuv就是實(shí)現(xiàn)我們常說的事件輪詢
chrome v8
用c++完成的庫(kù)捕儒,其實(shí)就是把我們存的變量(let a = 1)冰啃,在c++中會(huì)生成一個(gè)相同的存儲(chǔ)單元,(類似于堆棧的深復(fù)制)刘莹,這時(shí)候底層用c++操作這個(gè)javascript生成的堆棧從而改變javascript的變量值阎毅。
注:唯一標(biāo)識(shí)的意思,和指針有點(diǎn)像点弯, 失去了句柄的對(duì)象被垃圾回收機(jī)制回收扇调, 對(duì)應(yīng)的,有有效句柄鏈接的對(duì)象不會(huì)被回收抢肛。(外觀模式狼钮,接口定義)
libuv
基礎(chǔ)概念
事件循環(huán)碳柱,異步IO,不阻塞
基本單位熬芜,句柄(可以理解為事件類型莲镣,如click,scroll,resize,各種類型的句柄)等涎拉。
打包
node-gyp
node-N-API
c++內(nèi)容不怎么變瑞侮,但是node的版本經(jīng)常變化。
解決不同版本node對(duì)應(yīng)的插件兼容問題曼库。
擴(kuò)展知識(shí)
npm和cnpm
扁平化安裝