目标
终极目标是让大家对node(主要如何开发c++插件)有一个快速完整的认识
示例
需要安装编译c++文件为node可以使用的.node文件。 node-gyp
python安装 mac自带
官网demo。
nodejs源码简单分析
benchmark : 一些nodejs 性能測试 代码
build:编译nodejs 生成文件夹
deps:nodejs依赖 的工具包。包含 v8、http_parser、opensslzlib、zlib、uv
doc:文档
lib:包括JavaScript源代码
src:包括C++源代码
test:測试代码
tools:编译时用到的工具
这里我们仅仅需关注 src 和lib 目录
开发node插件流程
新建c++ 文件.cc .h文件
node-gyp打包.cc源文件
js引用,调用
node基础(关于开发插件的)
基本概念
node.js实际上就是一个用c++完成的程序,他之所以能够实现javascript,是因为他的底层主要的两部分第三方库,chrome V8和 libuv。
chrome v8是javascript运行时,用来解析执行javascript代码
libuv就是实现我们常说的事件轮询
chrome v8
用c++完成的库,其实就是把我们存的变量(let a = 1),在c++中会生成一个相同的存储单元,(类似于堆栈的深复制),这时候底层用c++操作这个javascript生成的堆栈从而改变javascript的变量值。
image.png
注:唯一标识的意思,和指针有点像, 失去了句柄的对象被垃圾回收机制回收, 对应的,有有效句柄链接的对象不会被回收。(外观模式,接口定义)
libuv
基础概念
事件循环,异步IO,不阻塞
基本单位,句柄(可以理解为事件类型,如click,scroll,resize,各种类型的句柄)等。
打包
node-gyp
node-N-API
c++内容不怎么变,但是node的版本经常变化。
解决不同版本node对应的插件兼容问题。
扩展知识
npm和cnpm
扁平化安装
网友评论