2017-06-15 43 views
2

我正在開發一個適用於Android和iOS的科爾多瓦應用程序與Visual Studio 2015更新3和最近我有一些問題爲Android構建(iOS構建工作正常)。科爾多瓦爲Android編譯失敗VS,但不是從控制檯

當我從Visual Studio生成時出現以下錯誤(我正在使用診斷MSBuild輸出,但這只是顯示與錯誤相關的所有內容)。

1>      No scripts found for hook "before_compile". (TaskId:25) 
1>      ANDROID_HOME=C:\Program Files (x86)\Android\android-sdk (TaskId:25) 
1>      JAVA_HOME=c:\Program Files\Java\jdk1.8.0_131\ (TaskId:25) 
1>      Reading build config file: C:\apprep\build.json (TaskId:25) 
1>16:58:37.536  1> 
1>MSBUILD : cordova-build error : TypeError: undefined is not a function 
1>      TypeError undefined is not a function (TaskId:25) 
1>     Done executing task "MdaVsCli" -- FAILED. (TaskId:25) 

但是,如果我運行該命令的命令cordova build android提示它工作得很好。

我正在使用Cordova 7.0.1,節點6.11.0,npm 3.10.10,Java 1.8.0.131。

我已經嘗試了無數解決方案來解決這個問題(卸載並重新安裝工具和模塊,緩存清理等)。我無法確定Cordova的Visual Studio工具有什麼問題。我可以在某處找到其他日誌記錄,以幫助我認識到undefine is not a function錯誤來自哪裏?

+0

是這個鏈接 - https://stackoverflow.com/questions/39084692/msbuild-cordova-build-error-typeerror-cannot-read-property-indexof-of-und適用於你? – Gandhi

+0

是你的成功,如果你通過。 cordova CLI? – Gandhi

+0

我沒有列表中的空域。此外,我的錯誤是不同的。它是「未定義不是函數」。是的,當我從命令提示符運行'cordova build android'時,它運行良好,正如我已經提到的。 –

回答

0

我認爲根本原因是您的Node版本過低。我試圖通過關於推送通知的MSVC Cordova教程。 MSVC默認爲像v0.11.16這樣的古老節點版本。但是他們告訴你在教程中使用的插件之一已經更新,現在需要更高版本的Android平臺,這需要更新版本的Node(默認LTS版本v6.11.0對我來說工作正常)。

  1. 卸載任何舊版本的節點。
  2. https://nodejs.org/en/download/處安裝LTS版本的節點(當我寫這個時爲v6.11.0)。
  3. 重新啓動Windows(實際上,我遇到了一種情況,即某個進程或守護進程以某種方式掛在緩存的代理節點版本的節點上,以防止它被刪除,就像它應該這樣)。
  4. 打開cmd.exe並鍵入where node.exe,確保v6.11.0發行版的路徑首先出現。如果不修改你的PATH並重新啓動。
  5. 在選項 - >項目和解決方案 - >外部Web工具下的MSVC中,將您的6.11.0版本的node.exe路徑添加到列表頂部的 。 (所有文檔都告訴你這樣做,但可能沒有必要,至少在沒有它的情況下,我的內置版很好)。
  6. 在MSVC下的選項 - > Apache Cordova工具 - >科爾多瓦工具禁用「使用沙盒版本的NodeJS」。
  7. 在MSVC下的選項 - >阿爾法科爾多瓦工具 - >科爾多瓦工具選擇「清除科爾多瓦緩存」。

注意:如果更新從V5到科爾多瓦V6指令8-11建議(見https://stackoverflow.com/a/29990937/2448947

  • 在控制檯型npm install -g [email protected]安裝(其中XYZ是您在項目config.xml中選擇的cordova CLI版本),以確保Node的新版本安裝了Cordova。
  • cordova platform update android更新您的平臺。
  • 在您的項目目錄中,運行cordova plugin list
  • 對於(10)中列出的每個插件,運行cordova plugin remove <X> AND cordova plugin add <X>重新安裝插件。

  • 確保您看到從控制檯運行cordova build android的「BUILD SUCCESSFUL」。

  • 驗證構建也在MSVC中工作。
  • 您現在可以通過在MSVC設置和重建中重新開啓「使用沙盒版本的NodeJS」來輕鬆地重新生成「TypeError undefined不是函數」錯誤。因此,根本原因必定是由於NodeJS的過時版本。


    我對這個最喜歡的事情是軟件界如何試圖以半打不同的不相容的軟件包管理器是現在不斷的互相沖突的解決DLL地獄問題。