如何使用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 构建工具)

相关推荐
Mintopia16 分钟前
深度伪造检测技术在 WebAIGC 场景中的应用现状
前端·javascript·aigc
BUG_Jia16 分钟前
如何用 HTML 生成 PC 端软件
前端·javascript·html·桌面应用·1024程序员节
木易 士心18 分钟前
CSS 样式用法大全
前端·css·1024程序员节
0129252019 分钟前
1.1 笔记 html 基础 初认识
前端·笔记·html
2501_9293826540 分钟前
[Switch大气层]纯净版+特斯拉版 20.5.0大气层1.9.5心悦整合包 固件 工具 插件 前端等资源合集
前端·游戏·switch·1024程序员节·单机游戏
非凡ghost41 分钟前
Tenorshare 4DDiG(数据恢复软件) 最新版
前端·javascript·后端
非凡ghost1 小时前
WinMute(自动锁屏静音软件) 中文绿色版
前端·javascript·后端
7ayl1 小时前
Vue3 - Reactivity的核心流程
前端·vue.js
The 旺1 小时前
【AI编程实战】零基础用ChatGPT+Cursor开发完整Web应用:30分钟从idea到上线
前端·chatgpt·ai编程
sulikey2 小时前
Qt 入门简洁笔记:信号与槽
前端·c++·笔记·qt·前端框架·1024程序员节·qt框架