1、先下载nodejs源码包解压
2、安装Python2.x,我安装的是2.7版本
3、node-gyp一般高版本的node都自带了,为了保险起见执行npm install -g node-gyp 安装一下
4、用cmd进入node源码目录执行vcbuild.bat release开始编译,我的电脑安装的是vs2013顺利编译在release目录下面顺利生成node.exe
5、根据网上的教程制作noins.bat 文件放在node源码根目录下
@echo off
if "%1"=="" goto help
mkdir "%1"
mkdir "%1"\include
copy /y src\node.h "%1"\include
copy /y src\node_object_wrap.h "%1"\include
copy /y src\node_buffer.h "%1"\include
copy /y src\node_version.h "%1"\include
copy /y deps\v8\include\*.h "%1"\include\
copy /y deps\uv\include\*.h "%1"\include\
mkdir "%1"\include\uv-private
copy /y deps\uv\include\uv-private\*.h "%1"\include\uv-private
mkdir "%1"\include\ev
copy /y deps\uv\src\ev\*.h "%1"\include\ev
mkdir "%1"\include\c-ares
copy /y deps\uv\include\ares.h "%1"\include\c-ares
copy /y deps\uv\include\ares_version.h "%1"\include\c-ares
mkdir "%1"\lib
copy /y Release\node.lib "%1"\lib
copy /y Release\node.exe "%1"
echo =================================
echo Install succeefully!
goto exit
if not errorlevel 0 echo Error "install-path" & goto exit
:help
echo nodins.bat install-path
:exit
看的不是很懂,好像就是从原来的目录复制文件
6、进入node源码目录执行nodins.bat e:\nodejs,执行成功
我的e:\nodejs如下,里面应该已经包含了开发node扩展需要的头文件和库文件
7、使用vc新建项目我的是vs2013
8、新建个cpp文件输入下面的代码
#define BUILDING_NODE_EXTENSION
#include <node.h>
using namespace v8;
void getstring(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "hello world"));
}
void Init(Handle<Object> exports) {
NODE_SET_METHOD(exports, "getstring", getstring);
}
NODE_MODULE(dbr, Init)
9、在工程属性的配置属性-常规中将输出目录改为.\;
10、在工程属性的配置属性-常规中将目标文件扩展名改为.node;
11、在工程属性的配置属性-C/C++-常规-附加包含目录添加头文件目
12、在工程属性的配置属性-链接器-常规-附加库目录添加目录
13、在工程属性的配置属性-链接器-输入-附加依赖项添加lib库:node.lib
14、编译成功之后在项目目录下面生成一个.node文件
15、在项目目录下面新建一个test.js文件
var a = require("./Win32Project3/Win32Project3.node")
var b = a.getstring()
console.log(b)
我下载的node源码包是4.4.7版本的node本地版本是4.2使用本地node执行test.js之后成功在控制台输出
hello word
不过下载了最新版本的node v6.2.2之后失败,不知道是头文件太旧了还是我的写法有问题,有待继续研究