使用napi-rs,通过node调用rust代码

0、node版本建议在16以上

1、安装napi-rs

npm init -y
npm install @napi-rs/cli --save-dev

2、初始化一个 napi 项目

npx @napi-rs/cli new my-rust-addon
# 如果这句不行就试试
npx napi new my-rust-addon

3、进入my-rust-addon文件夹,在src里有lib.rs

  • 在原有代码上加上代码(也可以不加)
  • [napi(js_name = "add_two_numbers")] 是因为不加别名,node调用的时候会把下划线风格默认转成驼峰法,如果喜欢驼峰可以直接使用[napi]
#![deny(clippy::all)]

use napi_derive::napi;

#[napi(js_name = "plus_100")]
pub fn plus_100(input: u32) -> u32 {
  input + 100
}

#[napi(js_name = "add_two_numbers")]
pub fn add_two_numbers(a: u32, b: u32) -> u32 {
  a + b
}

#[napi(js_name = "run_loop")]
pub fn run_loop() -> u32 {
  let mut sum = 0;
  for i in 0..1000000 {
    sum += i;
  }
  sum
}

4、在my-rust-addon的package.json可以看见napi设置

  • 这个主要设置编译目标(Target Triple)
  • x86_64-pc-windows-msvc =
    x86_64架构 + 平台厂商Vendor + Windows操作系统 + 使用MSVC工具链编译的二进制文件
  "napi": {
    "binaryName": "my-rust-addon",
    "targets": [
      "x86_64-pc-windows-msvc"
    ]
  }

5、在my-rust-addon文件夹内开始编译

npm run build # 正式release包
npm run build:debug # 测试debug包
  • 可以看见my-rust-addon文件夹内有一个my-rust-addon.win32-x64-msvc.node文件,不用去target文件夹找,就在my-rust-addon文件夹内,这个就是可执行文件了

6、写一个index.js文件

const path = require('path');
const _p = path.join(__dirname, 'my-rust-addon', 'my-rust-addon.win32-x64-msvc.node');
console.log(_p);

const addon = require(_p);

const { plus_100, add_two_numbers, run_loop } = addon;

console.log(plus_100(5));
console.log(add_two_numbers(2, 3)); // 5


console.time('loop_rust');
run_loop();
console.timeEnd('loop_rust');

console.time('loop_js');
let sum = 0;
for (let i = 0; i < 1000000; i++) {
    sum += i;
}
console.timeEnd('loop_js');

  • 运行这个文件得到结果,可以看见rust的效率有多高
node index.js 
D:\demo\rust\rustnode\my-rust-addon\my-rust-addon.win32-x64-msvc.node
105
5
loop_rust: 0.039ms
loop_js: 2.401ms
posted @ 2025-11-10 22:11  fengyujia  阅读(11)  评论(0)    收藏  举报