用于Android的cordova版本从VS失败,但不是从控制台失败

时间:2017-06-15 07:42:23

标签: android visual-studio cordova visual-studio-cordova

我正在使用Visual Studio 2015 Update 3为Android和iOS开发Cordova应用程序,最近我在为Android构建时遇到了一些问题(iOS构建工作正常)。

当我从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,Node 6.11.0,npm 3.10.10,Java 1.8.0.131。

我已经尝试过无数解决这个问题的方法(卸载并重新安装工具和模块,缓存清理等等)。我无法想象Cordova的Visual Studio工具有什么问题。我是否可以在某处找到可以帮助我了解此undefine is not a function错误来自何处的其他日志记录?

1 个答案:

答案 0 :(得分:0)

我认为根本原因是你的Node版本太低了。我试图在推送通知上运行MSVC Cordova教程。 MSVC默认为古代节点版本,如v0.11.16。但是他们告诉你在教程中使用的其中一个插件已经更新,现在需要更高版本的Android平台,这需要更新版本的Node(默认的LTS版本v6.11.0对我来说很好)。

  1. 卸载任何旧版本的Node。
  2. https://nodejs.org/en/download/安装LTS版本的Node(我写这篇文章时为v6.11.0)。
  3. 重新启动Windows(实际上,我遇到过一种情况,即某个进程或守护进程挂在某个节点的缓存代理版本上,这会阻止它像预期的那样被删除。)
  4. 打开cmd.exe并键入where node.exe,确保首先显示v6.11.0版本的路径。如果不修改PATH并重新启动。
  5. 在选项中的MSVC中 - >项目和解决方案 - >外部Web工具将node.exe的6.11.0版本的路径添加到顶部 列表。 (所有文档告诉你这样做,但可能没有必要,至少我没有它就建好了。)
  6. 在选项中的MSVC中 - >用于Apache Cordova的工具 - > Cordova Tools禁用“使用沙盒版本的NodeJS”。
  7. 在选项中的MSVC中 - >用于Apache Cordova的工具 - > Cordova Tools选择“Clear Cordova Cache”。
  8. 注:如果您从Cordova的v5更新到v6,建议您使用说明8-11(请参阅https://stackoverflow.com/a/29990937/2448947

    1. 在要安装的控制台类型npm install -g cordova@X.Y.Z中(其中X.Y.Z是您在项目的config.xml中选择的cordova CLI版本),以确保新版本的Node安装了Cordova。
    2. 使用cordova platform update android更新您的平台。
    3. 在项目目录中,运行cordova plugin list
    4. 对于(10)中列出的每个插件,请运行cordova plugin remove <X>cordova plugin add <X>以重新安装插件。

    5. 确保您从控制台看到“BUILD SUCCESSFUL”正在运行cordova build android

    6. 验证构建是否也适用于MSVC。
    7. 现在,您可以通过在MSVC设置和重建中重新启用“使用沙盒版本的NodeJS”轻松地重新编写“TypeError undefined is not a function”错误。因此,根本原因必须是NodeJS的过时发布。

      我最喜欢的是软件社区如何尝试使用现在经常相互冲突的六个不同的不兼容软件包管理器来解决DLL Hell问题。