Cordova PhoneGap 3.4中暂存文件夹的目的?仅识别对此文件夹中index.html的更改?

Cordova PhoneGap 3.4中暂存文件夹的目的?仅识别对此文件夹中index.html的更改?,cordova,Cordova,我们注意到,在使用PhoneGap 3.4创建项目后,Xcode的项目导航器中出现了一个Staging文件夹。使用PhoneGap 3.2或更低版本创建项目时,此暂存文件夹未出现。PhoneGap文档非常糟糕,我们无法找到该文件夹存在的原因 更重要的是,正常的index.html文件似乎不再被识别,只有Staging文件夹中对index.html的更改才能被识别。为什么会这样?我也被它绊倒了,找不到任何解释。我刚才一直在胡思乱想 简短结论: “暂存”文件夹包含分发到iOS应用程序包中的www资产

我们注意到,在使用PhoneGap 3.4创建项目后,Xcode的项目导航器中出现了一个
Staging
文件夹。使用PhoneGap 3.2或更低版本创建项目时,此
暂存
文件夹未出现。PhoneGap文档非常糟糕,我们无法找到该文件夹存在的原因


更重要的是,正常的
index.html
文件似乎不再被识别,只有
Staging
文件夹中对
index.html
的更改才能被识别。为什么会这样?

我也被它绊倒了,找不到任何解释。我刚才一直在胡思乱想

简短结论:

“暂存”文件夹包含分发到iOS应用程序包中的www资产。暂存文件夹完全被文件夹my_cordova_project/www/(所有平台的通用www代码)和my_cordova_project/merges/ios/(Xcode项目的特定www代码)中的文件覆盖。这两个文件中的内容将被编辑。my_cordova_project/www/的内容在所有平台上都保持不变,由
cordova build
命令组织。从Cordova 3.3开始,似乎Xcode构建用于。。。命令不足以完成整个过程,您还需要调用
cordova build
命令以正确同步所有文件夹


长答案:

文件夹:
my_cordova_项目/平台/ios/www/
是否在Xcode中“映射”到
/我的xcode项目/staging/www/

您可以通过使用Finder临时更改文件名并观察Xcode中的树来检查这一点

文件夹:
my_cordova_项目/www/
是否在Xcode中“映射”到
/我的xcode项目/www/

然后考虑CORDOVA的合并概念,它允许为特定平台分发特定的WWW文档(参见)。通过将它们放入my_cordova_project/merges/文件夹并使用命令行

cordova build
命令,可以实现这一点。看来,
cordova build
不仅仅是第一次创建应用程序。如果启动构建并观察Xcode中的树,您将看到/my\u Xcode\u project/staging/文件夹被my\u cordova\u project/www/(并被merges文件夹专门化)完全覆盖

这尤其符合以下引用:

警告:使用CLI构建应用程序时,除非您知道自己在做什么,或者文档中另有规定,否则不应编辑/platforms/目录中的任何文件。在准备构建应用程序或重新安装插件时,此目录中的文件通常会被覆盖

当我使用PhoneGap的早期版本时,www内容在每个平台项目中存储和编辑,因此您必须将www从一个平台复制到另一个平台。如今,只有一个www文件夹由
cordova build
自动分发到所有平台。它非常方便,可以通过merges文件夹针对特定平台进行调整

因此,
cordova构建的影响也可以在eclipseadt中观察到,甚至可以在crossover中观察到。只要在/my\u Xcode\u project/www/中的Xcode中更改一些内容,运行
cordova build
,在Eclipse ADT中刷新树,您就会发现您的更改是分布式的


另一方面,令人费解的是,Xcode的buildforrunning命令没有将所有/my_Xcode_project/www/复制到/my_Xcode_project/staging/www/中。这只能通过
cordova build
命令完成。然而,如果你检查一个制作好的应用程序,你会发现/my_xcode_project/staging/www/中的文件,因此如果你编辑/my_xcode_project/www/,你也必须调用
cordova build

在进行任何更改之后,在xcode中构建/运行之前,你应该
sudo cordova build

这将导致Cordova使用您的资产的“staged”(即组装用于生产)版本更新/staging文件夹,该版本具有一些Cordova magic之类的特定于设备的插件。将/staging与/www进行比较,您会注意到前者中有一些额外的文件。

实际上,“staging”文件夹的内容会在您的设备上执行

myAwesomeProject/www ---copy---> Staging/www
Cordova的build命令将内容从“myAwesomeProject/www”文件夹复制到“Staging/www”文件夹。这些命令是:

sudo cordova build ios  //ios build
sudo cordova build android //android build

小心!请记住,build命令不仅将内容复制到“Staging”文件夹,而且还构建整个应用程序,包括本机ios/android代码。所以,这需要很长时间。对于较小的更改,我通常手动将更改的文件复制到“Staging”文件夹,并在iOS环境下使用XCODE构建和运行应用程序

我也遇到过同样的情况。在我的环境中,myProject/www/目录不会复制到myProject/Staging/www/目录。因此,我直接在Staging/www/directory中编辑文件。

你确定
sudo
吗?你真的需要
sudo
吗?如果托管文件夹不属于root用户或任何其他超级用户,则不需要。