javascript - 维护 PhoneGap 混合/Web 应用程序代码库

标签 javascript android ios cordova gruntjs

我正在研究维护跨平台(web、ios、android)phonegap 代码库所涉及的复杂性,该代码库允许尽可能简单地使用特定于平台的代码(和 Assets /测试)。

我目前采用的最佳方法是使用 grunt 构建典型 Web 应用程序的代码,然后使用 grunt-phonegap 模块生成相应的 phonegap 项目。

我相信这会起作用,但是对于我的 phonegap 项目,我知道我将需要使用一些专门编写的插件来利用某些设备功能(这些不是典型的cordova插件)

我想知道是否有人想出了一种方法来维护可以适应不同平台和要求的代码库。 Javascript 没有 #IF_DEF 功能,但是可以使用 grunt 实现类似的功能吗?

最佳答案

我最近自己也有同样的问题。我在网上找不到太多关于此的信息,因此我决定深入研究 Grunt、Node 和 Git。

Grunt 和 Node

在我的 Cordova 项目的根文件夹中(与 www、platforms、merges 和 plugins 文件夹一起),我有一个 grunt 项目。我将模块化 JavaScript 文件和 CSS 文件存储在 Cordova 项目根目录内的 src 文件夹中,这些文件可能依赖于平台,也可能不依赖于平台。这个 grunt 项目构建存储在 src 文件夹中的 JavaScript 和 CSS,并将生成的文件适本地放入 www 或 merges 文件夹。

我什至编写了一个 grunt 任务,通过优化和缩小 css、javascript 和 html 模板来构建应用程序的生产版本,然后重建 Cordova 平台项目以包含这些生产文件。

因为 JavaScript 中没有 #IF_DEF,所以我必须使用 Grunt(上面提到的)为每个平台构建 JavaScript。我按平台模块化了几乎所有的 JavaScript 函数。如果该功能没有平台差异(没有 native Hook ),我只需要一个文件。如果存在差异,我需要为该功能的每个平台创建一个单独的文件。例如,我的 Cordova onDeviceReady 和 onResume 函数通常因平台而异。我创建名为

CordovaEvents-ios.js and CordovaEvents-android.js

package.json 文件,我描述了我想要在我的应用程序中的“功能”。 CordovaEvents 是一个特性的例子。

我也支持“论点”。我在模块化文件的文件名中使用了上述相同的方法。一个论点可能是这样的
CordovaEvents-ios--production.js and CordovaEvents-android--production.js

在这种情况下,生产应用程序中所需的代码将不同于非生产代码。我可以在构建过程中简单地传递这个参数(或参数列表),然后将选择并构建正确的文件。如果有一种方法可以维护可以适应不同平台和要求的代码库,我认为这最能解决您的问题。要求是功能名称和参数。参数可以是你想要的任何东西,可能使用一个插件或另一个插件。

我还描述了我想要支持的平台(“iOS”、“Android”和“桌面”)。 Grunt 在一个 MultiTask 中处理每个平台,然后查看我想要支持的功能。它将尝试查找名为 的文件。功能平台.js .如果它找不到这个文件,它只会尝试寻找 feature.js。在我将平台所需的所有功能连接在一起后,它会将文件复制到 iOS 或 Android 的合并文件夹中。通常,根项目中 WWW 文件夹中保存的所有文件都可以在桌面上运行,因为没有本地 Cordova Hook ……这允许我在 Chrome 中进行调试。所有包含本地钩子(Hook)的文件都存储在合并文件夹中。一旦为相应平台构建了 Cordova 项目,就可以在设备模拟器中测试代码。

如果您是 Grunt 的新手,我强烈建议您查看他们的入门指南。

http://gruntjs.com/getting-started

Git

我还使用 Git 来版本我的代码。我使用 SourceTree 在我的 Cordova 项目的根文件夹中创建 Git 存储库,并在我的 Mac Mini 服务器上有一个远程存储库,我也可以推送我的提交。这使我们可以拥有代码的备份副本,并使我的团队也可以在带外处理代码。

Git 忽略 以下文件夹:
  • node_modules
  • 插件
  • 平台
  • 插件

  • 我的 Cordova 项目的根目录中包含的所有其他文件和文件夹都进行了版本控制。我使用以下链接作为引用来帮助定义我的 Cordova Git 策略:

    https://leanpub.com/developingwithcordovacli/read#version-control

    我并不是一夜之间就弄明白了所有这些东西,实际上花了两个多月的时间。我希望我的回答可以作为您和其他人的指南,以解决您在开篇帖子中提到的问题。

    关于javascript - 维护 PhoneGap 混合/Web 应用程序代码库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23605839/

    相关文章:

    android - 合金编译器失败

    android - Android线程控制多个纹理 View 会导致奇怪的闪烁

    ios - 将 UITextView 绑定(bind)到 MutableProperty

    ios - 当 UISearchController 处于事件状态时呈现 UIAlertController

    javascript - jquery datepicker 无法在 <h :form> 内工作

    javascript - try-catch block 是使用 `in` 运算符的可靠方法吗?

    android - sencha touch 2 无法在我的安卓手机上启动

    ios - Swift 5 加载多个 AVAudioPlayer 导致打开文件过多错误

    javascript - 为什么 [].slice.call() 返回 "empty slots"?

    javascript - 如何评估 Angular 表达式中的javascript预定义函数