前提: 安裝好node.js、Python2.7與visual studio 2013。
過程:
首先安裝GYP專案生成工具,npm install -g node-gyp 。
建立test目錄,這是我們的工作目錄,在此目錄下再建一個src目錄,用來存放C++原始碼,另新建一個名為binding.gyp的文字檔案,這是gyp的專案檔案,內容如下:
{
`targets`:[{
`target_name`:`hello`,
`sources`:[`src/hello.cc`]
}]
}
再寫一個簡單的hello.cc,內容如下:
#include <node.h>
using namespace v8;
Handle<Value> Hello(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("Hello world!"));
}
void init(Handle<Object> target) {
NODE_SET_METHOD(target, "hello", Hello);
}
NODE_MODULE(hello, init)
然後執行命令: node-gyp configure
如果正確執行的話,會出現一個目錄—-build,其下為你生成了vs2013的專案檔案,這樣就可以在vs2013中進行編輯與編譯了。
當然也可以直接用命令 node-gyp build進行編譯。
測試js程式如下:
var hello = require(`./hello`);
console.log(hello.hello());
其中遇到了一些問題,記錄如下:
1、C:UsersAdministrator.node-gyp .10.33這個目錄下,沒有預設Debug目錄,在vs2013中編譯成debug檔案時會提示 error LNK1104: cannot open file `C:UsersAdministrator.node-gyp .10.33Debug
ode.lib` ,建立一個Debug目錄,把與你作業系統環境相同的目錄下的node.lib拷貝到其中就好了。
2、NODE_MODULE(hello, init)中的hello是模組名,需要與檔名保持一致,不然編譯沒問題,執行時會出錯。因為在require(`./hello.node`)時,既去找相應的檔案,也匹配對應的MODULE。
3、我是對應著樸靈的《深入淺出node.js》這本書,並參考一些網頁進行學習的,書給出的gyp專案檔案中有一個conditions項,`libraries` : [`-lnode.lib`] ,因為這一句,編譯時一直報錯:can`t open node.lib,明明檔案是存在的,但就是報錯,找了很多資料,也沒解決,後來我把node.lib直接拷貝到工作目錄下,用命令列編譯成功了!但在vs2013中,錯誤還是依舊,我怎麼想都不對,最後上官網,發現人家的例子都沒有給出這種引數,我就試著把這個東東刪除了,結果一切OK!大神們,誰能給出一個正確的解釋?!