适用于 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-engine 与 cordova-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 摄像头插件