Node.js扩展通常指原生C++模块(以.node为后缀的二进制文件),用于访问底层系统功能或提升性能。以下是详细的安装流程:
确保系统已安装Node.js(包含npm包管理器)。可通过以下命令验证:
node -v # 查看Node.js版本
npm -v # 查看npm版本
若未安装,可从Node.js官网下载LTS版本(推荐)或使用nvm(Node版本管理器)安装。
node-gyp是构建原生模块的核心工具,用于编译C++代码。全局安装命令:
npm install -g node-gyp
安装后需验证是否成功:
node-gyp --version
原生模块编译需要C++编译环境和Python支持:
npm config set python D:\Python27\python.exe # 替换为实际Python路径
# Ubuntu/Debian
sudo apt-get install build-essential libssl-dev
# macOS
xcode-select --install
npm config set python /usr/bin/python2.7 # 替换为实际Python路径
若未创建项目,可在目标目录下初始化package.json(用于管理依赖):
mkdir my-extension && cd my-extension
npm init -y # 生成默认package.json
创建C++文件(如hello.cc),示例代码(输出“Hello, World!”):
#include <node.h>
using namespace v8;
void Method(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "Hello, World!", NewStringType::kNormal).ToLocalChecked());
}
void Initialize(Local<Object> exports) {
NODE_SET_METHOD(exports, "hello", Method); // 暴露方法给JavaScript调用
}
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize) // 定义模块名称
注:NODE_MODULE宏的第一个参数需与模块名称一致(如hello)。
在项目目录下运行以下命令,生成binding.gyp(构建配置文件):
node-gyp configure
该命令会根据项目中的C++文件生成build目录和binding.gyp文件。
执行编译命令,生成.node二进制文件:
node-gyp build
编译成功后,.node文件会存放在build/Release/目录下(如build/Release/hello.node)。
创建JavaScript文件(如test.js),加载并调用原生模块:
const addon = require('./build/Release/hello.node'); // 加载.module文件
console.log(addon.hello()); // 输出: Hello, World!
运行测试:
node test.js
node-gyp rebuild(而非node-gyp build);npm shrinkwrap),避免因编译环境变化导致兼容性问题;免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。