自从过去两年以来,我在科尔多瓦的工作有2份,并且工作正常。
对于android / ios
Windows手机
在这两个副本中,仅存在平台特定的更改。意味着在Windows Phone中不允许加载html文件,因此我将所有html文件添加到脚本标签中并加载到main index.html中以使事情正常工作,并且它在Windows Phone中工作,并且在第二个副本中我制作了正常的html文件作为android和ios分开,加载外部html文件没有问题。
所以我的问题是:有没有办法将所有代码合并到一个副本中,并且具有相同的www文件夹代码也可以在android,ios和Windows Phone中使用?
也许是不可能的,因为我通过Windows Phone与android / ios相比有一些不同的文件结构。
请指导是否有人知道适用于所有平台的一些通用方法。
最佳答案
您可以使用Cordova CLI中的“合并”功能来执行此操作。想象我有一个看起来像这样的项目:-rw-r--r-- 1 simon staff 1115 Mar 22 19:57 config.xmldrwxr-xr-x 3 simon staff 102 Mar 17 21:47 hooks/drwxr-xr-x 7 simon staff 238 Mar 22 19:57 platforms/drwxr-xr-x 7 simon staff 238 Mar 22 19:57 plugins/drwxr-xr-x 7 simon staff 238 Mar 21 13:11 www/
使用我的应用程序代码全部位于www中,其组织方式如下:drwxr-xr-x 4 simon staff 136 Mar 24 12:42 css/drwxr-xr-x 4 simon staff 136 Mar 21 13:11 img/-rw-r--r-- 1 simon staff 1338 Mar 21 15:16 index.htmldrwxr-xr-x 4 simon staff 136 Mar 22 18:29 js/
想象一下,我已经安装了Android和iOS平台,并且想在每个平台上做一些不同的事情,而又不做很多事情:if (device.platform === 'Android') { // Android specific code} else { // iOS specific, assuming we are only supporting iOS}
我的应用程序中的某种代码。这也不能扩展到许多平台(例如,在其中添加Windows和BB,然后每次都有更多if / else或switch语句)。
为了解决这个问题,Cordova的CLI可以合并代码,并寻找称为merges的顶级文件夹。因此,将其中之一放在config.xml所在的同一文件夹中,这样项目现在看起来像:-rw-r--r-- 1 simon staff 1115 Mar 22 19:57 config.xmldrwxr-xr-x 3 simon staff 102 Mar 17 21:47 hooks/drwxr-xr-x 4 simon staff 136 Mar 22 17:47 merges/drwxr-xr-x 7 simon staff 238 Mar 22 19:57 platforms/drwxr-xr-x 7 simon staff 238 Mar 22 19:57 plugins/drwxr-xr-x 7 simon staff 238 Mar 21 13:11 www/
然后创建:merges/androidmerges/ios
您在其中放置的所有内容都将被复制到特定于平台的www文件夹中,并从您的主要www文件夹中的同一路径覆盖内容,或者如果www中没有相同的名称/路径,则将其添加。
例:ls -lF merges/android/imgtotal 16-rw-------@ 1 simon staff 7626 Mar 21 13:23 logo.png
此图像logo.png将仅用于Android替换www / img / logo.png。我可以为iOS做同样的事情(添加merges / ios / img / logo.png),也可以使用默认图片(www / img / logo.png)。
可以针对特定平台的需要对任何类型的文件(JS / CSS / img / JSON /任何)进行此操作。
无需编写钩子脚本即可完成此工作,当您为每个平台运行cordova build时,CLI都会自动执行。
Cordova CLI docs中提供了有关此概念的文档。