适用于 iOS 的 Cordova 和 localhost

Posted

技术标签:

【中文标题】适用于 iOS 的 Cordova 和 localhost【英文标题】:Cordova and localhost for iOS 【发布时间】:2018-04-04 15:23:05 【问题描述】:

我尝试让 Cordova 通过 localhost 而不是 ios (11.3) 的 file:// 为我的应用程序提供服务,但无法找到最新的插件来执行此操作。

我在 5 月的 config.xml 文件中尝试了 https://github.com/apache/cordova-plugin-wkwebview-engine 和 <content src="http://localhost/index.html" />

我尝试了 Cordova-httpd,但它似乎被废弃了一年,当我尝试安装它时,这就是我得到的:

(node:4165) UnhandledPromiseRejectionWarning: CordovaError: Failed to fetch plugin https://github.com/floatinghotpot/cordova-httpd.git via registry.
Probably this is either a connection problem, or plugin spec is incorrect.
Check your connection and plugin name/version/URL.
Error: npm: Command failed with exit code 1 Error output:
npm ERR! code ENOPACKAGEJSON
npm ERR! package.json Non-registry package missing package.json: git+https://github.com/floatinghotpot/cordova-httpd.git.
npm ERR! package.json npm can't find a package.json file in your current directory.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/gomoon/.npm/_logs/2018-04-04T14_48_24_009Z-debug.log
    at /usr/local/lib/node_modules/cordova/node_modules/cordova-lib/src/plugman/fetch.js:173:37
    at _rejected (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:864:24)
    at /usr/local/lib/node_modules/cordova/node_modules/q/q.js:890:30
    at Promise.when (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:1142:31)
    at Promise.promise.promiseDispatch (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:808:41)
    at /usr/local/lib/node_modules/cordova/node_modules/q/q.js:624:44
    at runSingle (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:137:13)
    at flush (/usr/local/lib/node_modules/cordova/node_modules/q/q.js:125:13)
    at process._tickCallback (internal/process/next_tick.js:150:11)
(node:4165) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 1)
(node:4165) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

所以任何插件或提示都会让我对此感到困惑。

【问题讨论】:

【参考方案1】:

我也发现很难理解如何让 Cordova 在 iOS 上流畅运行。我想我迟到了 5 个月才试图回答这个问题,但无论如何我都会为其他浏览这个问题的人尽力而为。

我使用插件 cordova-labs-local-webserver 让它在我的单页应用程序 (ReactDOM) 上顺利运行。 cordova-plugin-wkwebview-enginecordova-labs-local-webserver 配合得很好,这将使您可以在 Cordova 项目中使用 http://localhost/ 访问 www 文件夹。

您可以在 apache 的实验性插件官方仓库中找到该插件:https://github.com/apache/cordova-plugins。该 repo 有几个由 Apache 维护的插件。每个插件都位于其自己的分支中。名为 local-webserver 的分支包含插件 cordova-labs-local-webserver。安装插件后,您可以将以下内容添加到 config.xml 文件中,以便在您的 Cordova 应用程序中提供来自 http://localhost/ 的内容:

<content src="http://localhost:0" />

请注意,每次启动应用程序时,端口 0 都会为您提供一个随机端口。请参阅 readme.md 了解更多信息 (readme.md)。

由于获取问题,我在安装插件时遇到了问题。我认为这是因为我需要将 --fetch 参数添加到 cordova plugin add 命令。我允许克隆 repo 并从我机器上的目录安装它。 然而。在这样做之前。试试:

cordova plugin add https://github.com/apache/cordova-plugins#local-webserver

这将直接从 repo 分支 local-webserver 获取插件。 如果这不起作用。试试

cordova plugin add https://github.com/apache/cordova-plugins#local-webserver --fetch

现在我祝你安装插件好运。但是,如果您像我一样不走运,则可以通过将存储库从 Github 克隆到本地计算机上的文件夹并将分支从 master 切换到 local-webserver 来以不太舒适的方式安装插件。在您的机器上拥有插件源代码后,您可以使用以下命令安装插件:

cordova plugins add directory to the local-webserver branch folder

这样做的一个问题是,当您想使用插件添加平台时,您的 cordova 项目将始终从该文件夹中查找源代码。

最佳解决方案 如果您希望使用一个命令安装 fetch 并安装 cordova-plugin-wkwebview-engine 插件和 cordova-labs-local-webserver,您可能有兴趣尝试位于的 wkwebview-engine-localhost 插件在同一个仓库中。它只是同时获取 cordova-plugin-wkwebview-engine 以及 cordova-labs-local-webserver 插件。试试:

cordova plugin add https://github.com/apache/cordova-plugins#wkwebview-engine-localhost

如果这不起作用......

cordova plugin add https://github.com/apache/cordova-plugins#wkwebview-engine-localhost --fetch

祝所有偶然发现这篇文章的人好运 :) 如果有人有任何建议,很高兴讨论和编辑此答案。

【讨论】:

以上是关于适用于 iOS 的 Cordova 和 localhost的主要内容,如果未能解决你的问题,请参考以下文章

如何清除适用于 iOS 平台的 Cordova 应用程序的 localStorage

适用于 Cordova 的 Visual Studio 工具 - 适用于 iOS 的 RemoteBuild 失败

构建命令失败:CompileAssetCatalog - 适用于 iOS 的 Cordova

如何在 mac 中安装适用于 ios 的 Cordova 摄像头插件

适用于 iOS 的 Phonegap/Cordova 日历插件无响应

是否有使用适用于 iOS 的蓝牙经典的 Cordova/PhoneGap 插件?