windows下運行多個版本node.js


  這段時間,一直在處理一個問題。windows下node.js調用dll(c++),用到了ffi,ref,ref-struct模塊,在node v0.10.22版本下運行正常,但高版本node下會出錯(經測試,0.12.x往上就不好使了): 

Error: The specified procedure could not be found.

  高版本node下重新編譯ffi等模塊也均告失敗,會報出一大堆語法錯誤之后:

gyp ERR! build error
gyp ERR! stack Error: `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe` failed with exit c
ode: 1
gyp ERR! stack     at ChildProcess.onExit (E:\tools\nvmw\v5.5.0\node_modules\node-gyp\lib\build.js:2
76:23)
gyp ERR! stack     at emitTwo (events.js:87:13)
gyp ERR! stack     at ChildProcess.emit (events.js:172:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "E:\\tools\\nvmw\\v5.5.0\\node.exe" "E:\\tools\\nvmw\\v5.5.0\\node_modules\\node-gy
p\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd D:\phpStudy\WWW\res2\badaling\client\ticketStorage\node_modules\ffi
gyp ERR! node -v v5.3.0
gyp ERR! node-gyp -v v3.3.1
gyp ERR! not ok

  萬般無奈之下,想到同時運行兩個不同版本的node.js。linux版本下有nvm能達到此目,在windows下我用到了nvmw。

  nvmw下載地址:http://pan.baidu.com/s/1xdmf3, 直接解壓縮就行,比如解壓到D:\nvmw文件夾中,將D:\nvmw\nvmw.bat添加到系統環境變量中,以便可以到處運行nvmw命令。

  然而問題又來了,nvmw用法如下:

Usage:
  nvmw help                    Show this message
  nvmw install [version]       Download and install a [version]
  nvmw uninstall [version]     Uninstall a [version]
  nvmw use [version]           Modify PATH to use [version]
  nvmw ls                      List installed versions

Example:
  nvmw install v0.6.0          Install a specific version number
  nvmw use v0.6.0              Use the specific version

  但是運行安裝命令時,由於國外源的問題,一直安裝失敗,我換了淘寶的源后也是一直失敗。但是,根源無非是得到不同版本的node.exe。我們可以在淘寶源路徑上(https://npm.taobao.org/mirrors/node/)手動下載對應版本的node.exe,然后放到D:\nvmw文件夾中,不同版本文件夾。

nvmw
    v0.10.22
        node.exe
    v5.3.0
        node.exe

  如上安裝了兩個版本的node,運行nvmw ls:

C:\Users\Administrator>nvmw ls
v0.10.22
v5.3.0
Current: none

  每開一個cmd命令窗口時,如果沒有運行nvmw use命令,則無法運行node和npm命令:

C:\Users\Administrator>node -v
'node' 不是內部或外部命令,也不是可運行的程序
或批處理文件。

  如果先指定運行哪個版本node:

C:\Users\Administrator>nvmw use v0.10.22
Now using Node v0.10.22

C:\Users\Administrator>node -v
v0.10.22

  每個cmd窗口之間相互獨立,想要使用node.js,必須先指定所要運行的版本!多開幾個cmd窗口,指定不同的運行版本,就可以在一台電腦上跑多個node.js版本的程序了!

 

  ps:用以上模塊調dll難免會遇到各種各樣的問題,畢竟是第三方模塊,作者如果后期不進行維護,很難保證在新版本node上好使。nodejs調用dll動態庫還可以通過寫addon來實現,但是所調用的dll涉及到結構體,較難處理,以及本人c++水平有限,還是沒能深入研究。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM