2017-06-15 44 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地狱问题。