google fonts

2016年5月3日 星期二

Node.js學習筆記:重複安裝後rollback安裝失敗

筆者最近碰到Node.js用官方的MSI檔案裝到快完後rollback的事件……歸咎原因我一開始就猜想是否沒清乾淨。

然後丟關鍵字餵Google,上頭方法都無腦測試過了,但還是不能用= =

在經過幾天空閒時間丟各種關鍵字餵Google,這邊提供幾種solution。

  1. 重新安裝至新的電腦再複製到開發機
  2. 使用官方exe再下載安裝npm
  3. 官方提供兩種第三方安裝方式
  4. 我就是要用MSI安裝!!!

至於有這幾種解的原因是:我一直想克服MSI的問題,但超過半數都叫大家用官方EXE後下載安裝npm,先是有時間壓力,因此多了幾種方法裝NodeJS。

重新安裝至新的電腦再複製到開發機

如果專案告急沒時間做各種嘗試,這絕對是最快的辦法。

  1. 先找一台沒裝過NodeJS的Windows OS。
  2. 下載官方MSI檔後逐步安裝。
  3. 到安裝的資料夾(通常是C:\Program Files\nodejs)把整個nodejs加到壓縮檔。
  4. 複製壓縮檔到開發機,解壓縮到任意位置(這裡解壓至C:\nodejs)
  5. 在Win環境[開始]>[控制台]>[編輯您的帳戶的環境變數]或者用下圖方式搜尋: [開始]>[編輯您的帳戶的環境變數]
  6. 在[環境變數]下新增[path],值為「C:\nodejs;C:\Users\{使用者帳戶名稱}\AppData\Roaming\npm」如下圖:

    [環境變數]下新增[path]

    第一個位置是NodeJs主程式的位置,第二個為global(-g)的安裝位置。
  7. 然後開cmd測測看:
    
        node -v
        npm -v
        npm install gulp -g & :: 隨意安裝需要安裝至global的package測試,這邊用gulp
        gulp -v        
            

    如圖:

    cmd測node、npm、gulp版本號

使用官方exe再下載安裝npm

我一開始是用這個方案ㄉ,但是我安裝失敗惹,所以才衍生了第一種方法。

但我現在檢討安裝失敗的原因八成是在安裝npm的時候層次不對。

參考這篇安裝:Install Node.js and NPM on WindowsHow to use npm with node.exe(以及下面另一個回答有搬移的目錄)

下載官方exe檔到任意資料夾(這裡設定C:\node)。

到npm的github打包專案到node資料夾,或者用git clone,如下:

    C:\node\node_modules > git clone --recursive git://github.com/npm/npm.git

安裝的層次會如下:

  • node(資料夾)
    • node_modules(資料夾,自行新增)
      • npm(資料夾,剛剛下載的,把版本號拿掉)
    • npm(從npm/bin裡面複製出來。)
    • npm.cmd(從npm/bin裡面複製出來。)
    • node.exe

NodeJS.exe手動安裝路徑

先確認[環境變數]的[path]已將NodeJS的exe加入路徑,然後在cmd測試是否安裝成功:

    c:\newproject > npm -v
    c:\newproject > npm install gulp-sass

但是我發現這個方式安裝的package會裝入一堆沒用到的東西ˊ_>ˋ,而且不能下指令更新npm……

所以與其這樣我寧可推薦「重新安裝至新的電腦再複製到開發機」。

某次NodeJS改版把裡面的專案的modules都拉到最外層了……因此上次測試時才看到他裝了一堆東西(遠)至於下指令更新npm還有待實驗。

官方提供兩種第三方安裝方式

NodeJS官方提供了兩種第三方安裝NodeJS的方式,為了寫這篇我老實的測試了他做了什麼……

我測試的是Scoop,Scoop的安裝方法蠻簡單的。先確認PowerShell有被安裝在電腦中,然後在CMD下指令安裝Scoop(ㄟ,Scoop官方首頁的YouTube影片照做就好)。

安裝完Scoop後執行下列cmd string,Scoop會幫你把官方MSI下載下來且安裝到:C:\Users\{{使用者}}\AppData\Local\scoop\apps\nodejs\{{版本號}}\nodejs

    C:\隨便 > scoop install nodejs

最後把NodeJS的路徑放到[環境變數]下新增[path],關掉CMD重開一個,測試一下npm版本號,就確認安裝成功了0.0/

順帶一提,我發現放在Scoop指定的目錄下時,對全域的npm指令會放在相同Scoop的node_modules位置,所以[環境變數]就不用加C:\Users\{{使用者帳戶名稱}}\AppData\Roaming\npm

我就是要用MSI安裝!!!

本人就是不信邪,覺得機碼沒刪乾淨,所以四處找刪除的方法。

但碰到的人似乎沒有很多,所以一直沒找到……(有找到一條指令能刪光機碼,不敢用XD)

真正解決問題是我老實的看了安裝LOG檔……再對應LOG輸出的錯誤回頭Google找到機碼的位置,把機碼砍了才OK的= =

所以這題的重點是如何看MSI的LOG……

按照如何啟用 Windows Installer 記錄的作法蠻簡單的,安裝完後到它指定的目錄找txt就好。

先開啟LOG紀錄,再做一次安裝NodeJS,回頭找LOG的txt裡面錯什麼。最難的就是找錯什麼XD,因為LOG有快20M……訣竅是開啟本文搜尋「value 3」,或者「錯誤」也可以試試看。

MSI的Log錯誤截圖

除了MSDN用裝的方式(記得要解安裝,不然每次用MSI裝都會產生20M左右的LOG),也可以在CMD下指令記錄單次LOG

    msiexec /i "C:\LocalDir\node-v4.4.3-x64.msi" /L*V "C:\LocalDir\InstallLog.txt"

本篇的錯誤是:無法在 C:\Program Files\nodejs\node_perfctr_provider.man 安裝效能計數器,錯誤碼是 13。明顯的就是這個「效能計數器」的問題,大概GOOGLE一下找到這篇[MS-SQL]安裝時發生錯誤『檢查現有的效能計數器登錄區是否一致』

雖然按照他的方法開啟Regedit([開始]>[Regedit])檢查了但沒有結果XD,不過他提供了我可能的路徑:

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Perflib\...]

地毯式搜尋了一下,還真的在[_V2Providers]找到未清掉的機碼XD,直接對這個folder({1e2e157d-....})右鍵刪除,重裝NodeJs.msi就成功了!!!

登錄編輯程式(Regedit)截圖

經此一事,很明顯的我學到要針對錯誤對症下藥……所以LOG要看,亂測是沒有用的。

1 則留言: