0%

Nodejs Addon development

原先的NodeJS要跑Addon,通常都是寫Native C++ Code
不過現在Rust的影響力日漸增加,路也不只一條
在我的Github分別提供了兩種做法

C++

搭配node-gyp使用
程式碼就不列了,寫出其他細節

binding.gyp的寫法如下

1
2
3
4
5
6
7
8
{
"targets": [
{
"target_name": "fib",
"sources": [ "fib.cc" ]
}
]
}

編譯產生出fib.node,它的本質就是shared object

1
$ node-gyp configure build

至於Nodejs的使用方式

1
2
const Fib = require('fib');
console.log(Fib.fib(40));

Rust

Rust的產生端比較簡單,重點在於Cargo.toml
注意crate-type那欄指定dylib,也就是shared object

1
2
3
4
5
6
7
8
9
10

[package]
name = "fib_rs"
version = "0.1.0"
authors = ["hm"]

[lib]
name = "fib"
path = "src/fib.rs"
crate-type = ["dylib"]

編譯產生libfib.so

1
$ cargo build --release

Nodejs的使用方式就比C++版複雜一點,需要node-ffi

1
2
3
4
5
const ffi = require('ffi');
const rust = ffi.Library('libfib', {
fib: ['int', ['int']]
});
console.log(rust.fib(40));