工具链
- nodejs
- node-gyp
https://github.com/nodejs/node-addon-api/blob/main/doc/setup.md
调试
- Cmd+Shift+P 输入 configure task 配置一个任务,该任务会执行 npm run rebuild:dev,生成带调试信息的 node 扩展文件。笔者的配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| { "version": "2.0.0", "tasks": [ { "type": "npm", "script": "dev", "group": "rebuild", "problemMatcher": [], "label": "npm: dev", "detail": "node-gyp configure build --debug" } ] }
|
- 点击 debug 按钮之后,下面在 launch.json 中配置调试 node 扩展的任务,注意在配置的时候增加一个 preLaunchTask 任务,该任务就是我们上一步配置的。最终 luanch.json 配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| { "version": "0.2.0", "configurations": [{ "type": "lldb", "request": "launch", "name": "Debug", "preLaunchTask": "npm: dev", "program": "/Users/huangzz/.nvm/versions/node/v18.0.0/bin/node", "args": [ "/Users/huangzz/Documents/Project/N-API/node-addon/index.js" ] }] }
|
从 launch.json 可以看到整个调试的过程为:vscode 插件调用 lldb,启动 nodejs 去执行 index.js,在 js 文件中会调用 node 扩展,而该部分扩展已经包含了调试信息,故而可以用于调试。
文章
https://yunnysunny.gitbooks.io/nodebook/content/10_node_addon.html
https://academy.realm.io/cn/posts/oredev-kenneth-geisshirt-extending-node-js-cpp/
C++扩展源码示例
- https://github.com/kneth/DemoNodeExtension
V8 文档
- https://v8.dev/
node-addon-api 文档
https://github.com/nodejs/node-addon-api#api-documentation