Node.js(十二)插件开发

作者:燎原人生日期:2025/10/6

一、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:方便别人搜索你的插件
  • authorlicense

例如:

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.jsonversion 字段,然后再执行:

1npm publish
2

npm 不允许覆盖已发布的版本号。


7. 取消发布(仅限 72 小时内)

如果误发布,可以在 72 小时内执行:

1npm unpublish my-awesome-plugin --force
2

但请谨慎操作,发布后一般不建议撤回。


8. 原生插件补充

原生插件通常只发布源码,用户安装后由 node-gyp 编译。你可以在 package.jsonscripts 字段中加入:

1"scripts": {
2  "install": "node-gyp rebuild"
3}
4

这样用户 npm install 时会自动编译。


Node.js(十二)插件开发》 是转载文章,点击查看原文


相关推荐


Qiankun 子应用生命周期及使用场景解析
excel2025/10/5

在前端微前端架构中,Qiankun 是常用的微前端框架。它允许主应用动态加载多个子应用,而子应用必须遵循特定生命周期,保证能够被正确加载、挂载和卸载。本文将详细解析 子应用的三个核心生命周期函数:bootstrap、mount、unmount,并说明它们的使用场景,同时给出具体示例。 1. 子应用生命周期概览 子应用生命周期分为三个阶段: Bootstrap(初始化阶段) Mount(挂载阶段) Unmount(卸载阶段) 每个阶段有明确的调用时机和职责。 2. bootstrap:初始


《Shell脚本门诊部:我治好了日志清理、自动备份和监控报警的“慢性病”》
鋯莂從媊2025/10/4

核心思路: 把Shell脚本比作“药方”,专门治疗运维工作中的那些重复、繁琐的“慢性病”。每个案例都是一个完整的、可复用的脚本。 内容要点与实操步骤: 案例一:日志清理脚本(“磁盘空间肥胖症”) 1.病症: /app/logs 目录动不动就100%,需要自动清理7天前的日志。 2.药方: #!/bin/bash # 日志清理专家 - 专治磁盘空间肥胖症 LOG_DIR="/app/logs" FIND_RESULT=$(find $LOG_DIR -name "*.log" -typ


ElementUI-Table 表格实现行拖拽
宣晨光2025/10/3

1、引入依赖 npm install sortablejs --save 2、table表格设置 1、添加属性 ref="multipleTable"  row-key="id" @row-drag-end="handleDragEnd"  2、添加列 <el-table-column width="50" align="center">             <template >               <i class="el-icon-rank drag-han


--group-start/--group-end 能不能解决 OpenSSL 1.0 vs 1.1 的优先级问题?
dlz08362025/10/2

--group-start / --group-end 其实是 ld 链接器的一个功能,专门用来解决 循环依赖的静态库 问题。 例如: -Wl,--start-group -lfoo -lbar -lbaz -Wl,--end-group 会让链接器在这几个库之间反复扫描,直到符号解析完为止。 🔎 那么能不能用它来“优先选 1.0 而不是 1.1”? 答案是:不行,原因如下: --start-group/--end-group 只是解决静态库依赖次序的问题,不会影响动态


BFF层设计:GraphQL网关在微前端联调中的实践
qq_314166012025/10/2

在现代前端架构中,微前端(Micro-Frontend)和 GraphQL 已成为热门技术趋势。随着业务模块的复杂化,前后端协作变得越来越关键。在本文中,我们将深入探讨 BFF(Backend For Frontend)层在微前端联调中的实践经验,并分享如何通过 GraphQL 网关提升前后端协作效率 ??。 一、什么是 BFF 层 BFF(Backend For Frontend)是一种为前端量身定制的后端服务层。它的核心目标是将不同前端应用(Web、移动端等)对数据的需求进行统一


LinuxC++——etcd分布式键值存储系统API(libetcd-cpp-api3)下载与二次封装
深思慎考10/2/2025

etcd-cpp-apiv3 是一个 C++ 语言编写的 etcd 客户端库,用于与 etcd 分布式键值存储系统进行交互。特性说明项目简介基于 C++ 的 etcd v3 API 客户端库核心功能分布式键值存储、配置管理、服务发现、分布式锁主要依赖官方仓库github下载地址通信协议通过 gRPC 与 etcd 服务器通信 (HTTP2 + protobuf)


从 .NET 到 Java 的转型指南:详细学习路线与实践建议
百锦再@新空间9/30/2025

本文探讨了从.NET转向Java开发的关键要点,主要包括: 转型背景分析 Java在跨平台、生态系统、成本控制和人才储备方面具有优势 .NET与Java在运行时环境、内存管理机制上存在架构差异 语言基础对比 Java的基本数据类型与包装类体系 字符串处理机制(String/StringBuilder/StringBuffer) 面向对象特性的实现差异(类继承、接口等) 学习策略建议 利用两种语言在OOP概念上的相似性 重点关注平台特性、工具链和部署方式的差异 文章通过大量代码示例(如类型系统、资源管理、字符


【关于虚拟机执行ip addr 命令不显示ip地址问题】
Mr.Ja9/30/2025

本文主要记录了作者在使用虚拟机时,遇到执行ip addr命令不显示 IP 地址的问题及解决过程。起初,作者发现虚拟机仅显示回环地址与网卡物理信息,无 IPv4 地址,先后通过检查 Linux 系统内网卡配置文件、重启网络服务、切换虚拟机网络模式,以及搜索技术博客、咨询 AI 等常规方式排查,均未解决问题。最终,作者偶然意识到虚拟机 NAT 模式依赖物理机的 VMware 相关服务,经检查发现 Windows 物理机中 “VMware NAT Service” 服务未启动,启动该服务后,在虚拟机中执行ifup


Spec-Kit:AI驱动的软件开发全流程管理工具套件
是魔丸啊2025/10/8

Spec-Kit 是一套专为AI辅助开发场景设计的命令行工具套件,提供了从需求规格到代码实现的标准化工作流程。通过8个核心命令,它确保软件开发的每个环节都保持高质量和一致性。 核心理念 端到端管理:覆盖需求规格化、架构设计、任务分解、代码实现全流程 AI优化设计:专为与Claude等AI助手协作而优化 质量保证:内置多层次验证机制 知识沉淀:项目宪法、设计决策完整记录 这篇文章主要是想记录下spec-kit的核心command具体在干嘛。所以翻译了下所有的command(按照实际使用顺序)


前端梳理体系从常问问题去完善-框架篇(react生态)
大前端helloworld2025/10/9

前言 国庆去趟了杭州,但是人太多了,走路都觉得空气很闷,天气也很热,玩了两天就回宿舍躺了,感觉人太多,看不到风景,而且消费也很高,性价比不是很值得,就呆在公寓,看了两本书,有一本是名著,《呼啸山庄》虽然是写的是爱情,但爱情背后是人性。爱情啊,这个课题本来就是让人很难读懂得,关于爱,也看了一篇文章。关于爱上人渣得,爱上人渣,或是那些求而不得甚至是受制于禁忌的爱,本质上也是在追求这种刺激,或者说正是因为这样的对象能给自己麻木的感官更大的刺激,从而误以为这就是「爱」的本质,就像是人们虽然知道「吊桥效应

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0