【发布时间】:2018-04-20 05:35:39
【问题描述】:
我正在为 Apache Cordova 开发 Visual Studio 工具(在 Visual Studio 2015 中)。我被安装“cordova-plugin-googlemaps”的问题所困扰。
当我尝试安装插件时,它已安装但出现错误(由于它无法添加到平台文件夹并接近无用。)。请从 Visual Studio 控制台参考下面的错误日志。
------ 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
------ Name from source package.json: vs-tac
------ Version from source package.json: 1.0.42
------ Package already installed globally at correct version.
Installing plugin '...\Cordova_Plugins\cordova-plugin-googlemaps-master'
Starting launch process C:\Users\Admin\AppData\Roaming\Microsoft\VisualStudio\MDA\vs-npm\2.14.9\node.exe "C:\Users\Admin\AppData\Roaming\npm\node_modules\vs-tac\pluginInstall.js" --action install --projectSourceDir "...\test\test" --pluginName ...\Cordova_Plugins\cordova-plugin-googlemaps-master --language en-IN --cliVersion "6.5.0" --npmInstallDir "C:\Users\Admin\AppData\Roaming\npm" --parameters "API_KEY_FOR_ANDROID=API_KEY_FOR_ANDROID API_KEY_FOR_IOS=API_KEY_FOR_IOS" --loglevel silly
------ Cordova tools 6.5.0 already installed.
Each package is licensed to you by its owner. Microsoft is not responsible for, nor does it grant any licenses to, third-party packages. Some packages may include dependencies which are governed by additional licenses. Follow the package source (feed) URL to determine any dependencies.No scripts found for hook "before_plugin_add".
Calling plugman.fetch on plugin "...\Cordova_Plugins\cordova-plugin-googlemaps-master"
Copying plugin "...\Cordova_Plugins\cordova-plugin-googlemaps-master" => "...\test\test\plugins\cordova-plugin-googlemaps"
Calling plugman.install on plugin "...\test\test\plugins\cordova-plugin-googlemaps" for platform "android
Installing "cordova-plugin-googlemaps" for android
Running command: cmd "/s /c "...\test\test\platforms\android\cordova\version.bat""
Command finished with error code 0: cmd /s /c "...\test\test\platforms\android\cordova\version.bat"
Finding scripts for "before_plugin_install" hook from plugin cordova-plugin-googlemaps on android platform only.
Executing script found in plugin cordova-plugin-googlemaps for hook "before_plugin_install": plugins\cordova-plugin-googlemaps\src\before_plugin_install.js
Resolving module name for fs => fs
Resolving module name for path => path
Resolving module name for q => q
Warning: Failed to install 'cordova-plugin-googlemaps':TypeError: Object.keys called on non-object
at Function.keys (native)
at findPreference (...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:170:27)
at ...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:198:43
at Array.forEach (native)
at ...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:197:34
at Array.forEach (native)
at findPreference (...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:171:14)
at ...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:192:25
at Array.forEach (native)
at findPreference (...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:171:14)
C:\Users\Admin\AppData\Roaming\npm\node_modules\vs-tac\node_modules\q\q.js:126
throw e;
^
TypeError: Object.keys called on non-object
at Function.keys (native)
at findPreference (...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:170:27)
at ...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:198:43
at Array.forEach (native)
at ...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:197:34
at Array.forEach (native)
at findPreference (...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:171:14)
at ...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:192:25
at Array.forEach (native)
at findPreference (...\test\test\plugins\cordova-plugin-googlemaps\src\before_plugin_install.js:171:14)
Done
根据日志,我导航到“before_plugin_install.js”文件并查看了代码。控制台在“var findPreference = function(xmlData) {”
行下方记录了数据(在我的情况下为“xmlData”)
控制台日志的结果在我附加到此对话的文件中。因为数据量很大,而且还没有格式化,所以放入文件中可以让每个人都更容易使用在线 JSON 解析器查看它。
- 毕竟,当我第一次使用函数 findPreference 函数 输入代码时,它的数据在我附加的文件中首先标记为“1”更方便地在文件中搜索此“==>”,您也可以找到我所指的位置。(注意:-使用此数据,函数会进入带有 case “plugin” 的开关)
- 一旦代码进入案例插件,它会再次调用函数findPreference函数,并在我附加的文件中使用“标记为“2”的数据(在文件中搜索此“==>” )”。
- 程序第三次进入函数from
结果 = Object.assign(findPreference(node), results);
这是“findPreference 功能”中开关的默认条件 “before_plugin_install.js” 当 ii 从 foreach 获取此 “cordova-plugin-googlemaps” 时,在随附的文档中标记为“right_here_1”。 - 现在程序从那里进入函数 findPreference,其值为 "cordova-plugin-googlemaps",当它到达 "var keys = Object.keys (xmlData);" 函数内的代码行 findPreference 它失败,因为它不是对象。
因此在安装时导致错误。
您可以通过此链接cordova-plugin-googlemaps下载插件。
我还在插件的官方链接中提出了一个问题,这里是链接Link to issue raised。
请参阅此链接以获取附件Link to the document I referred as attachment。
非常感谢您的宝贵时间。
正如@Frix33 建议的那样
谢谢你的回复
这是您建议的第 170 行的控制台日志数据。 函数第一次调用(First Console.log)
[ 'plugin' ]
函数第二次调用(Second Console.log)
[ '$', 'name', 'js-module', 'description', 'repo', 'issue', 'author', 'license', 'keywords', 'engines', 'hook', 'platform' ]
这是第三个函数调用,它是从第 199 行表单“before_plugin_install.js”中进行的,其中数据 xmlData[tagName] 是名称”并且函数 “findPreference” 已通过 与 "cordova-plugin-googlemaps" 一起导致第 169 行出现错误,其中 xmlData 为 "cordova-plugin-googlemaps"。
Object.keys(xmlData);
XML 解析器无法解析我提供的链接的文件数据,因为我添加了一些文本来指向每个人都可以访问该位置,以供我在 google 文档共享的文件中使用的参考。 (我会添加建议以供其他人理解,非常感谢您指出这一点)。
编辑(21-04-2018)
这方面取得了一些进展。
使用以下命令通过命令行再次添加插件(通过导航到相应的项目)
cordova plugin add cordova-plugin-googlemaps \ --variable API_KEY_FOR_ANDROID="..." \ --variable API_KEY_FOR_IOS="..."
分别用“...”替换了我的键
之后开始收到与 "PLAY_SERVICES_VERSION" 相关的错误,因此应用了以下命令
cordova plugin add cordova-android-play-services-gradle-release --variable PLAY_SERVICES_VERSION=11.8.0
目前有以下
“无法为 org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler 类型的对象获取未知属性 'ANDROID_SUPPORT_V4_VERSION'”
我尝试使用以下命令解决此问题,但错误仍然存在
cordova plugin add cordova-plugin-android-support-v4
它安装了cordova-plugin-android-support-v4(21.0.1)
【问题讨论】:
-
尝试在第 170 行的 before_plugin_install.js 中添加“keys”的 console.log,我认为 xmlparser 无法读取 plugin.xml 文件中的内容。
-
@Frix33 我已将第 170 行的控制台日志添加到上面底部的问题中。你能复习一下吗?
-
嗯.. 我在 VS2015 中使用 cordova-cli 7.1.0 构建插件没有问题.. 你使用的是什么版本的 cordova?因为 VS15 默认使用 6.x,并且在插件的自述文件中报告 “您需要指定 cli-7.1.0 或更高版本”
-
嘿@Frix33 感谢您指出版本兼容性。我使用了可能是问题的 cordova-cli 6.5.0 但是当我尝试使用 7.1.0 或 8.0.0 构建时它失败了。你能看看这个链接的日志吗error log link at page 12
-
是的,在 VSCordova 中使用 cordova 7.1 构建有点棘手。在这篇文章中阅读我的答案:https://stackoverflow.com/questions/48080658/taco-roadmap-update-11-with-cordova-7-support/49357659#49357659
标签: cordova visual-studio-2015 cordova-plugins visual-studio-cordova