在家裡電腦體驗過無比順暢的VS2015 Cordova專案經驗,準備在公司展開Cordova大冒險,萬萬沒想到,公司機車特殊的網路環境(之前已被SSL中間人憑證搞過多次),原本簡單的自動下載編譯部署執行,變成可歌可泣的天堂路。喵的,我又想唱金包銀惹…
上回提過,VS2015封裝了複雜繁瑣的npm Cordova模組下載、安裝過程,按下編譯或執行鈕,Visual Studio就會默默搞定一堆雜工,使用者眼不見心不煩,當個快樂的小傻瓜尊貴的上流開發者就好。家庭背景特殊的小孩總是比較早熟,網路環境特殊的開發人員也是,無法茶來伸手飯來張口,動手寫程式前得先陪Visual Studio蹲在地上做雜工。
在公司環境,VS2015安裝過程順利,建立Cordova專案也沒什麼問題,但按下編譯鈕,Output視窗出現以下訊息:
1>------ Build started: Project: BlankCordovaApp1, Configuration: Debug Android ------
1> Your environment has been set up for using Node.js 0.12.3 (x64) and npm.
1> ------ Ensuring correct global installation of package from source package directory: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\ApacheCordovaTools\packages\vs-tac
1> ------ Name from source package.json: vs-tac
1> ------ Version from source package.json: 1.0.0
1> ------ Package already installed globally at correct version.
1> ------ Cordova tools 4.3.1 already installed.
1> ------ Build Settings:
1> ------ Build Settings:
1> ------ platformConfigurationBldDir: x:\temp\CordovaLab\BlankCordovaApp1\bld\Android\Debug
1> ------ platformConfigurationBinDir: x:\temp\CordovaLab\BlankCordovaApp1\bin\Android\Debug
1> ------ buildCommand: prepare
1> ------ platform: Android
1> ------ cordovaPlatform: android
1> ------ configuration: Debug
1> ------ cordovaConfiguration: Debug
1> ------ projectName: BlankCordovaApp1
1> ------ projectSourceDir: x:\temp\CordovaLab\BlankCordovaApp1
1> ------ npmInstallDir: C:\Users\jeffrey\AppData\Roaming\npm
1> ------ language: en-US
1> ------ Adding platform: android
1> No version supplied. Retrieving version from config.xml...
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
呃,只知道Build 1 failed,完全沒有失敗原因。原來是因為Visual Studio預設只顯示最少的編譯訊息,而Cordova專案依賴外部編譯器編譯,編譯過程的詳細訊息預設不會顯示。需調整如下圖,將「MSBuild project build output verbosity」由Minimal改為Normal以上等級:
重新執行一次,便可在Output視窗找到錯誤原因:npm http GET httqs:/registry.npmjs.org/cordova-android/3.7.2時發生"Unable to fetch platform android: Error: certifiate not trusted"。
不用懷疑,又是公司網管設備偷換中間人SSL憑證搞的鬼,之前雖然設過npm cafile,知何故不管用。另外,還發現Cordova編譯過程也會從github下載東西,也可能有HTTPS問題。MSDN文件寫得挺詳細,有提到如何設定Proxy解決npm及git連線問題,依著這個線索及同樣原理,試著暫時停用npm及git的SSL驗證排除問題:
npm set strict-ssl false
git config http.sslVerify "false"
呼,終算編譯成功~