- 这是一个用于制作node的rust扩展的的中文教程,接下来我将会一步一步教学。
- 由于天朝墙的问题,建议大家先准备好代理。
- windows-build-tools
- Visual C++ Build Tools
- Visual Studio 2015以上
- (仅限于Windows Vista / 7).NET Framework 4.5.1
- Node
- Rust
- 设置Visual Studio的版本如2017则改为2017即可,npm config set msvs_version 2015
npm install -g neon-cli
- 运行命令建立项目,那我们来一发求斐波那契数吧
- 先建立项目,同时看是否之前的环境是否搭建有误 首先运行
neon new fib
接下来,切换到生成的目录,安装依赖并编译
cd fib
npm install
打开native目录里的src中的lib.rs文件,修改为
#[macro_use]
extern crate neon;
use neon::vm::{Call, JsResult};
use neon::js::JsString;
use neon::js::JsInteger;
use neon::js::Variant;
//原有的hello方法
fn hello(call: Call) -> JsResult<JsString> {
let scope = call.scope;
Ok(JsString::new(scope, "hello node").unwrap())
}
//斐波那契数方法入口
fn fib(call: Call) -> JsResult<JsInteger> {
let scope = call.scope;
//获取第一个参数
let option_num = call.arguments.get(scope,0);
//定义参数值变量
let mut num:i32 = 0;
//获取参数值
if let Some(x1) = option_num {
if let Variant::Integer(x2) = x1.variant() {
num = x2.value() as i32;
}
}
//调用简单的求斐波那契数方法,并返回js的Integer对象
Ok(JsInteger::new(scope, easy_fib(num)))
}
// 简单的求斐波那契数方法,有兴趣的同学可以实现一下矩阵快速幂求斐波那契数
fn easy_fib(num:i32) -> i32
{
if num < 2
{
return 1;
} else {
return easy_fib(num-1) + easy_fib(num-2);
}
}
//模块导出
register_module!(m, {
try!(m.export("hello", hello));
try!(m.export("fib", fib));
Ok(())
});
var addon = require('../native');
console.log(addon.hello());
console.log(addon.fib(30));
cnpm install #或neon build
node .\lib\index.js