如何使用Napi-RS 开发nodejs插件

Napi-RS是什么?

napi-rs是一个使用Rust构建预编译Nodejs插件的框架 ,通过这个框架我们可以使用Rust来编写我们自己的原生Nodejs 插件。

在开始之前,需要我们提前在本机安装好rust的开发环境,rust官网 即可安装 安装完成之后使用

js 复制代码
rustc --version

检测是否安装成功。

初始化一个新项目

实测需要node版本>= 18.12.0
sql 复制代码
pnpm add -g @napi-rs/cli 全局安装 @napi-rs/cli 模块 使用napi new 初始化一个项目。 
输入项目名称和生成的文件夹目录以及选择你的插件想要支持的平台(包含Linux 和macos 以及windows平台)
输入 a 可以选择所有平台
看你的需求是否需要选择ci发布。

最后成功生成项目

项目开发

复制代码
进入项目 yarn 安装依赖
安装完成之后可以使用yarn build 来构建第一个本地的包。
yarn build 之后会项目中生成一个index.js文件,
该文件主要用于适配我们在不同平台上加载使用Rust编写的node插件的二进制文件。
这样我们在本地环境或者第三方环境就可以访问到我们编写的插件了。

使用yarn build 时会自动调用项目目录下的build.rs 文件,然后再使用Cargo build,来编译我们写在src/lib.rs里面的rust代码 ,我们后续的rust代码核心逻辑也是主要写在这个地方。

Rust侧代码

src/lib.rs -> 目前我们生成的项目中默认帮我们生成了一个很简单的rust代码。

rust 复制代码
#![deny(clippy::all)]

#[macro_use]
extern crate napi_derive;

#[napi]
pub fn sum(a: i32, b: i32) -> i32 {
  a + b
}

当我们使用 yarn build 之后会默认帮我们编译导出成兼容cjs和esm规范的二进制代码文件包。 本地调用时会加载我们项目根目录下生成的二进制文件。

eg: 新建一个test.mjs文件

内容如下

js 复制代码
import { sum } from './index.js'

console.log(sum(30,100))

node test.mjs -> 则可以正确的看到我们最终输出的结果。

同时我们也可以再lib.rs文件中添加其他的rust代码。

rust 复制代码
#[napi]
pub fn concatenate_strings(s1: String, s2: String) -> String {
  let result = format!("{}{}", s1, s2);
  result
}

重新yarn build 编译,可以看到我们重新生成了index.js文件,并且更新了代码。

js 复制代码
const { sum, concatenateStrings } = nativeBinding

我们的类型文件也重新更新了。

js 复制代码
export function sum(a: number, b: number): number
export function concatenateStrings(s1: string, s2: string): string

之后我们可以本地调试看是否可以成功调用我们新增的rust代码, 发现也是没有问题的。

js 复制代码
import { sum , concatenateStrings  } from './index.js'

console.log(sum(30,100))
console.log(concatenateStrings('Hello','World'))

130
HelloWorld

更多的关于编写更高级的rust代码的功能可以参考rust官网和napi-rs官网。

如何发布

首先创建自己的npm公共作用域 napi rename 重命名刚刚创建的项目 如果发布napi-rs 包需要添加远程git url 仓库地址 重命名项目名称为公共作用域下自己定义的名称 eg: @tangtaue/xxx 之后

初始化 git 仓库 添加远程地址 提交代码 修改版本号 继续push 变动。

js 复制代码
npm init --scope=@xxx 
napi rename 
git init
git remote add origin 你的远程仓库地址
git add .
git commit -m "你的描述"
git push

最终发布

js 复制代码
npm version patch
git push --follow-tags

最后

主要阐述了如何使用napi-rs 这个框架 来使用rust 创建和开发我们自己的基于rust 的前端开发工具库。 一些更高级的操作需要有一定的rust 基础才能够开发出自己满意的node插件。

一些可能会用到的相关链接如下:

www.rust-lang.org/ rust官网

napi.rs/docs/introd... napi-rs官网

www.rspack.dev/ rspack 官网 (基于 Rust 的高性能 Web 构建工具)

相关推荐
崔庆才丨静觅7 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60617 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了7 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅7 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅8 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
崔庆才丨静觅8 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment8 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅9 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊9 小时前
jwt介绍
前端
爱敲代码的小鱼9 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax