当前位置: 首页 > news >正文

使用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)); // 5console.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
http://www.gsyq.cn/news/45886.html

相关文章:

  • 智语写作都有哪些功能?看这一篇就够了!智语写作全功能详解
  • rufus.ini
  • Explorer++
  • Interpretability-Guided Test-Time Adversarial Defense
  • 2025 年 11 月开窗器厂家推荐排行榜,链条开窗器,机芯开窗器,配件开窗器,电动开窗器公司推荐
  • noip5
  • #题解#洛谷P3143
  • 20232326 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • 2025 ICPC成都+南京游记
  • MySQL表的增删改查 - 教程
  • 20232420 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • COLMO洗衣机维修24小时售后服务点电话号码
  • 科烁集成灶维修服务丨24h在线报修
  • 【算法学习】AC自动机
  • 华凌燃气灶全国各市服务点网点热线号码
  • 20234320 2025-2026-1 《网络与系统攻防技术》实验四实验报告
  • 6G网络通讯端到端结构
  • 万喜消毒柜售后维修中心服务热线电话(2025/已更新)
  • 通过远程桌面连接Windows实例, 提示“为安全考虑, 已锁定该用户帐户, 原因是登录尝试或密码更改尝试过多”
  • 重练算法(代码随想录版) day6 - 哈希表part1
  • 别让料单拖慢开关柜生产!这个功能让精准与效率双在线
  • Netty管道机制:ChannelPipeline与Handler详解
  • 25.11.10随笔联考总结
  • [Python刷题记录]-旋转图像-矩阵-中等
  • 2025年11月智能油烟机型号排行:实测数据与选购要点一网打尽
  • P1531 I Hate It
  • CI/CD产品选型调研 - 详解
  • 安装向日葵远程协助软件
  • 教务管理系统开发博客
  • 2025年11月智能油烟机型号推荐对比:五强机型性能参数全解析榜