windows平臺搭帶c++擴展的nodejs環境

公司產品需要使用nodejs作後臺服務器,同時要用C++處理邏輯和數據庫存儲,所以需要nodejs及其node-gyp擴展包環境,這環境在linux上搭建比較方便,在安裝gcc和python2.6或2.7的環境上直接configure、make install就行了。但是作爲linux新手,感覺linux上編碼簡直是痛苦,沒有智能提示,嗯,我是linux新手。於是想回到windows上開發。

        可是在windows上裝環境就稍微麻煩一點,摸索了幾天才裝上了。目前nodejs官網最新版本是6.10.0,此版本貌似只能用VS2015編譯+python2.6或2.7(用VS2010沒編譯成功,mingw我還在摸索中),官網給的nodejs6.10.0的msi安裝包安裝後只有node.exe程序和npm(js包)這樣的運行環境,沒有node c++擴展的開發環境,也就是沒有node相關的頭文件和靜態庫即node、v8、uv等等,所以得自己拿源碼來編譯。

        先簡單說一下關係,node.exe是javascript的解釋器,基於v8框架可以使用node-gyp(也是一個js包,由node.exe解釋執行)包將同樣基於v8框架的C++代碼編譯爲nodejs插件包來調用。新版本的nodejs已經自帶npm,npm也是一個js包,由node.exe解釋執行,它是nodejs的工具包管理工具,使用“npm install XXX”和“npm uninstall XXX”來安裝和卸載其它工具包,比如node-gyp就可用npm來安裝。

        編譯nodejs源碼前,先要安裝VS2015和python2.6或2.7的環境,然後啓動cmd控制檯,進入源碼目錄,deps是依賴包的目錄,發現npm就在裏面,這個是js包,不需要編譯,而openssl、uv、v8就需要編譯了:


回到外層目錄,執行vcbuild.bat就可編譯,可加help查看幫助,再詳細點文本方式打開vcbuild.bat,還會發現更多細節,比如運行“vcbuild VC2015”也是一樣的。



開始本想試試加個msi項編譯後打個包,發現還需要裝什麼Wix,沒功夫研究了,就直接編譯Release版了。

編譯完成後,結果在當前目錄下的Release目錄裏:

        

現在要把可執行程序和lib庫以及外面src目錄和deps目錄的頭文件和npm包提取出來,高手可以自己寫腳本提取這些東東尤其是頭文件。但我查看vcbuild.bat腳本發現原來configure是用python寫的,看來大多過程都是bat和python在工作了。大致是vcbuild.bat調用python configure生成node.sln工程文件,再調用VS的msbuild程序來編譯node.sln。

然後查看目錄下的供gcc用的makefile文件,原來是調用tools目錄下的install腳本,這應該是linux上編譯的步驟,windows平臺本來是要用Wix打包成msi的,現在我去按linux上的步驟去做:

於是乎我只要在命令行中輸入該語句,就可以提取出相關的東西,再看看install.py腳本,發現它會從out\Release\裏去提取node.exe,這是gcc編譯時的生成路徑,而VS編譯時只有Release,沒有out目錄,所以乾脆新建一個out目錄,將Release目錄移進去,

腳本在提取npm和node-gyp時會建立軟鏈接,這個在windows系統上會報錯,所以在如圖第36行前加#將它註釋掉先。

然後在命令行裏輸入“python tools\install.py [install | uninstall] <路徑前綴>  <目錄名>”,即可將node.exe、頭文件、npm包提取到“路徑前綴+目錄名”的路徑裏,如圖,我是將之提取到上級目錄下的nodejs6.10.0目錄中,


最後還是有一點需要手動處理的工作,查看提取後的目錄,發現bin裏只有node.exe,lib裏只有npm包,也就是說之前編譯的Release目錄下的lib靜態庫和其它可執行程序還沒有提取出來,需要手動複製。還有需要把lib\node_modules\npm\bin\npm.cmd和lib\node_modules\npm\bin\node-gyp-bin\node-gyp.cmd複製到node.exe所在的bin目錄裏,最後將該bin目錄添加到系統的PATH環境變量中,就可以在命令行裏執行node、npm、node-gyp命令了。node-gyp本可以用npm安裝的,它這裏直接提供了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章