Cordova CLI - After update, any and all commands fail with "Error: Parameter 'url' must be a string, not undefined"

Cordova CLI - After update, any and all commands fail with "Error: Parameter 'url' must be a string, not undefined"

我使用 sudo npm update -g cordova

更新了 cordova

更新后,我无法使用任何 CLI 命令来准备、构建或运行我的任何项目。

我收到以下错误

Error: Parameter 'url' must be a string, not undefined

我尝试在 Whosebug 上搜索帮助,但可用的解决方案对我不起作用。

我试过再次更新,并再次安装特定版本但没有效果。 剩下的唯一步骤是卸载 cordova 和 npm 并重新安装,但如果有人有更好的解决方案,请提供帮助。

感谢您的帮助:)

更新 nodejs、npm 或(尤其是)cordova 后遇到上述错误消息的任何人。

解决方案是使用 cordova create <projectname> 创建一个新的 cordova 项目,然后安装您正在构建的插件和平台。

下一步是复制 config.xml 首选项(仅首选项,配置的精确副本在我的情况下不起作用)和 www 文件夹内容。

我什至尝试卸载 nodejs、npm、cordova,然后以随机顺序单独重新安装它们,结果却让事情变得更糟。

我的特定问题的答案是 cordova 识别项目根文件夹的方式。逻辑是......令人费解的。就我而言,我的 Documents 文件夹中有一些垃圾文件夹,包括一个来自非常旧的 cordova 项目的 www 文件夹。我清除了当前项目中的 platforms 文件夹,这导致 cordova 上升到一个目录并使用我文档文件夹中 www 文件夹中的垃圾 config.xml。

底线:运行 cordova info 查看正在加载的 config.xml 数据,您可能会感到惊讶。

问题是白名单的 config.xml 语法。而不是 uri 你应该使用 origin:

<access uri="*" />

应该是:

<access origin="*" />
  1. 做一个cordova plugin remove cordova-plugin-name。如果显示任何关于 cordova_plugins.js 文件的投诉,请执行 cordova platform remove ios|android(无论显示哪个平台)。如果这不起作用,请进入您的 plugins 文件夹并删除插件文件夹及其在 fetch.json.
  2. 中的条目
  3. cordova plugin add cordova-plugin-name.
  4. 使用 cordova platform add ios|android 添加回您的平台。

你可以开始了。无需创建新项目。

好的,因为我在尝试修复导致问题的代理错误时无意添加了这一行:

 <access origin="*" />

在哪里?缺少属性 href 使其无法解析。然后导致错误

(node:3362) UnhandledPromiseRejectionWarning: TypeError: Parameter "url" must be a string, not undefined
    at Url.parse (url.js:103:11)
    at Object.urlParse [as parse] (url.js:97:13)
    at parseWhitelistUrlForATS (/platforms/ios/cordova/lib/prepare.js:1005:20)
    at /platforms/ios/cordova/lib/prepare.js:965:23

删除此行使其生效