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