一、Node.js 原生插件(Native Addon)开发入门教程
1. 准备环境
- 安装 Node.js(建议最新版)
- 安装 node-gyp 工具(用于编译 C++ 代码)
1npm install -g node-gyp
- 安装编译环境
- Windows: 需要安装 Windows Build Tools
- macOS: 需要安装 Xcode
- Linux: 需要安装 g++、make 等
2. 创建项目目录
1mkdir my-native-addon 2cd my-native-addon 3npm init -y 4
3. 安装 N-API 依赖(推荐使用 napi)
1npm install node-addon-api 2
4. 编写 C++ 源码
新建 addon.cc 文件:
1#include <napi.h> 2 3// 一个简单的函数 4Napi::String Hello(const Napi::CallbackInfo& info) { 5 return Napi::String::New(info.Env(), "Hello from C++!"); 6} 7 8// 初始化模块 9Napi::Object Init(Napi::Env env, Napi::Object exports) { 10 exports.Set("hello", Napi::Function::New(env, Hello)); 11 return exports; 12} 13 14NODE_API_MODULE(addon, Init) 15
5. 创建 binding.gyp 文件
1{ 2 "targets": [ 3 { 4 "target_name": "addon", 5 "sources": [ "addon.cc" ], 6 "include_dirs": [ 7 "<!@(node -p \"require('node-addon-api').include\")" 8 ], 9 "dependencies": [ 10 "<!(node -p \"require('node-addon-api').gyp\")" 11 ], 12 "cflags!": [ "-fno-exceptions" ], 13 "cflags_cc!": [ "-fno-exceptions" ], 14 "defines": [ "NAPI_DISABLE_CPP_EXCEPTIONS" ] 15 } 16 ] 17} 18
6. 编译插件
1node-gyp configure 2node-gyp build 3
编译成功后会在 build/Release/ 目录下生成 addon.node 文件。
7. 在 Node.js 中调用
新建 test.js 文件:
1const addon = require('./build/Release/addon.node'); 2console.log(addon.hello()); // 输出:Hello from C++! 3
运行:
1node test.js 2
二、Node.js 框架插件开发(以 Express 中间件为例)
1. 创建插件包
1mkdir express-my-plugin 2cd express-my-plugin 3npm init -y 4
2. 编写插件代码
新建 index.js 文件:
1// 一个简单的 Express 中间件 2module.exports = function(req, res, next) { 3 console.log('Request URL:', req.url); 4 next(); 5}; 6
3. 在 Express 项目中使用
假设你的 Express 项目目录为 my-express-app,在里面安装你的插件:
1npm install ../express-my-plugin 2
在 Express 项目中引入并使用:
1const express = require('express'); 2const myPlugin = require('express-my-plugin'); 3 4const app = express(); 5 6app.use(myPlugin); 7 8app.get('/', (req, res) => { 9 res.send('Hello World!'); 10}); 11 12app.listen(3000, () => { 13 console.log('Server started on http://localhost:3000'); 14}); 15
访问 http://localhost:3000/,你会在控制台看到每次请求的 URL。
三、常见问题与进阶
- 原生插件推荐使用 node-addon-api 封装 N-API,兼容性好。
- Express 插件可以发布到 npm,其他框架如 Egg.js、Hexo、VSCode 插件开发也有各自的标准和文档。
- 如果你想开发更复杂的原生插件,可以学习 N-API 的更多接口,比如处理 Buffer、异步方法等。
- 如果你想开发其他框架插件,建议查阅官方文档或告诉我,我可以提供对应的入门示例。
四、插件发布
1. 准备你的插件包
确保你的插件目录结构规范,至少包含:
package.json- 主入口文件(如
index.js或原生插件的.node文件) README.md(建议写清用法、API)- LICENSE(建议有开源许可证)
例如:
1my-plugin/ 2├── index.js 3├── package.json 4├── README.md 5└── LICENSE 6
如果是原生插件,还要确保 .node 文件不会直接发布,而是由用户本地编译。
2. 注册 npm 账户
如果还没有 npm 账号,点击这里注册。
注册后,在命令行登录:
1npm login 2
输入用户名、密码、邮箱即可。
3. 配置 package.json
name:插件包名(不能和已有的 npm 包重名)version:版本号(建议语义化,如1.0.0)description:简要说明main:主入口文件(如index.js)keywords:方便别人搜索你的插件author、license等
例如:
1{ 2 "name": "my-awesome-plugin", 3 "version": "1.0.0", 4 "description": "An awesome plugin for Node.js", 5 "main": "index.js", 6 "keywords": ["nodejs", "plugin", "express"], 7 "author": "Your Name", 8 "license": "MIT" 9} 10
4. 发布插件
在插件目录下执行:
1npm publish 2
如果看到 + [email protected],说明发布成功!
注意:
- 默认发布到 npm 公共仓库。如果你想发布到私有仓库,需要配置 registry。
- 如果包名被占用,可以加前缀,比如
@yourname/my-plugin,这叫“作用域包”,需要先在 npm 上创建组织(scope)。
5. 验证发布
可以在 npm官网 搜索你的包。
其他人或你自己可以通过:
1npm install my-awesome-plugin 2
来安装并使用。
6. 发布新版本
每次修改后,记得修改 package.json 的 version 字段,然后再执行:
1npm publish 2
npm 不允许覆盖已发布的版本号。
7. 取消发布(仅限 72 小时内)
如果误发布,可以在 72 小时内执行:
1npm unpublish my-awesome-plugin --force 2
但请谨慎操作,发布后一般不建议撤回。
8. 原生插件补充
原生插件通常只发布源码,用户安装后由 node-gyp 编译。你可以在 package.json 的 scripts 字段中加入:
1"scripts": { 2 "install": "node-gyp rebuild" 3} 4
这样用户 npm install 时会自动编译。
《Node.js(十二)插件开发》 是转载文章,点击查看原文。
