【问题标题】:Serve cordova.js remotely in PhoneGap 3.x在 PhoneGap 3.x 中远程服务 cordova.js
【发布时间】:2013-12-02 11:55:20
【问题描述】:

借助 PhoneGap 2.x,我能够快速开发应用程序,方法是让应用程序从change 上的服务器上拉下新资产,而不是每次都重新部署到设备上。

我可以包含 cordova.js 并将其与其他资产一起发送,效果很好。

我实际的 PhoneGap 应用只是一个带有 window.location = "my/dev/server" 的外壳,直到我需要分发它们,然后我会在本地打包资产。

我似乎无法通过 3.x 执行此操作。 :(

我可以查看所需的cordova.js,但它“需要”一堆其他资产。也许是包含了一个繁琐的过程?

这些资产(cordova.js + 需求树)究竟是如何打包的?以及如何将它们捆绑到一个文件中以便在开发环境中远程服务? <- an answer to these questions gets the bounty

【问题讨论】:

    标签: javascript ios iphone cordova gruntjs


    【解决方案1】:

    最后我设法将 cordova.js 包括插件 打包到一个平台 JS 文件中并使其工作。现在可以从 2.9 升级到 3.x、4.x,只需从 2.9.1 替换原始的 cordova.js(当然还要升级本机部分)。希望这能解决问题。我很困惑为什么 cordova 不提供这个,而是依赖于动态包含这些文件。

    希望这是有用的,并为其他人节省了我花了 2 天时间弄清楚的时间。

    #!/bin/bash
    echo rm -r CordovaPseudoProject
    rm -r CordovaPseudoProject
    cordova create CordovaPseudoProject com.pseudo.CordovaPseudoProject CordovaPseudoProject
    cd CordovaPseudoProject/
    cordova platform add ios
    cordova plugin add org.apache.cordova.device
    cordova plugin add org.apache.cordova.device-motion
    cordova plugin add org.apache.cordova.device-orientation
    cordova plugin add org.apache.cordova.geolocation
    cordova plugin add org.apache.cordova.camera
    cordova plugin add org.apache.cordova.dialogs
    cordova plugin add org.apache.cordova.vibration
    cordova plugin add org.apache.cordova.console
    cordova prepare
    
    # concat all plugin files into a single file
    IFS=$'\n'       # make newlines the only separator
    cd platforms/ios/www
    
    ## extract plugin files
    grep '"file":' cordova_plugins.js | sed 's/.* "//g' | sed 's/",//g' > tmp_junk_tmpq
    cat cordova_plugins.js > cat_plugins.js
    for j in `cat tmp_junk_tmpq` ; do
        echo "cat $j >>cat_plugins.js"
        cat $j >> cat_plugins.js
    done
    rm tmp_junk_tmpq
    
    # overwrite cordova_plugins.js with concatenated version
    #echo cp cat_plugins.js cordova_plugins.js
    #cp cat_plugins.js cordova_plugins.js
    
    echo cat cordova.js cat_plugins.js to cordova_platform_complete.js
    cat cordova.js cat_plugins.js > cordova_platform_complete.js
    
    cd $CUR_WD
    echo "CREATED CordovaPseudoProject/platforms/ios/www/cordova_platform_complete.js"
    

    【讨论】:

      【解决方案2】:

      查看 Cordova Loader,它会编译资产并为其提供服务:https://github.com/andrewreedy/cordova-loader

      【讨论】:

        【解决方案3】:

        对于仍然感兴趣的任何人,我创建了一个脚本,该脚本将 Cordova 3.X 所需的所有cordova 文件打包,包括一个文件中的插件,您可以从服务器端提供这些文件。 仅在 cordove 3.4 中测试。

        它支持缩小和添加以及md5签名。

        https://github.com/borisnieuwenhuis/cordovapackageplugins

        【讨论】:

          【解决方案4】:

          我不确定为什么它在 3.x 上不适合你,但绝对可以重新构建 JS 文件并提供它。

          这些资产(cordova.js + 需要树)究竟是如何打包的?

          在将它们打包在一起之前,它们都被放置在不同的模块中(common、exec、util、平台特定的实现等),然后有一个 grunt 脚本将所有内容打包在一起。

          以及如何将它们捆绑到一个文件中以便在开发环境中远程服务?

          如果您只想获取新版本的cordova.js,您应该能够通过下载 JS 源代码并自己运行 grunt 脚本来自己压缩所有内容。

          来源可在此处获得: https://github.com/apache/cordova-js

          您必须安装 node.js、npm 和 grunt,但如果您没有安装,说明在自述文件中。

          下载源代码,然后运行

          grunt
          

          在根目录中,您应该在“pkg”目录中找到一个“cordova.ios.js”,以及其他平台的相同文件。那应该是您正在寻找的“cordova.js”。

          我认为这应该可以帮助您,但如果没有,请随时询问。

          【讨论】:

          • 是的,这很有帮助。如果我使用插件,我需要做一些特别的事情吗?他们是否改变了文件的打包方式?
          • 假设您在谈论 JS 插件,脚本正在与 cordova.js 相同的目录中查找文件 cordova_plugins.js。它在初始化时调用的lib/common/pluginloader.js 中执行此操作(在lib/common/init.js 中)。不幸的是,这意味着您将无法将它们打包到一个文件中。如果您愿意,您可以修改 pluginloader.js 以在内部读取脚本,但将它们分开可能更容易。
          • 如果你去修改lib/common/pluginloader.js,你将不得不通过运行grunt再次重建cordova.ios.js
          • 检查cordova.js 是否正确加载的最佳方法是什么?我的应用程序调用navigator.device.capture.captureVideo,它工作正常,但是当我开始远程服务cordova.js 时它停止工作。它也不会产生任何错误输出,所以我不确定它是 cordova.js 文件还是其他东西。
          • 嗯,我刚刚通过执行以下操作使其工作:1. 使用 CLI 界面创建一个新项目 2. 通过 CLI 添加插件 3. 将应用程序端 index.html 更改为执行window.location = "my/dev/server/www/"; 4. 将整个www 文件夹复制到我的开发服务器 5. 将捕获逻辑添加到我的开发端代码中;它工作得很好。您将需要 cordova_plugins.jsplugins 目录,其中包含所有插件。我不认为有办法将它压缩成一个文件。
          【解决方案5】:

          我不知道这是否会帮助你,但这是我对科尔多瓦 3.X 的理解:

          • 您的 /www 文件夹中有您的 cordova.js
          • 您通过 CLI 添加插件(例如:cordova plugin add org.apache.cordova.media)
          • 在您的平台/[平台]/www/plugins 中创建了一个文件夹,其中包含所需的 javascript 插件。
          • /www 文件夹中还有一个“cordova_plugins.js”
          • 在 cordova.js 的第 1321 行(可能取决于您的 3.x 版本)您会看到一个名为“injectPluginScript”的函数,在该函数中,它会注入“cordova_plugins.js”的内容,该函数会导入/www/plugins 中需要的插件

          所以我认为如果您导入 cordova.js、cordova_plugins.js 和插件文件夹,它可能会起作用。

          【讨论】:

          • 对,我需要编写一个脚本,将所有这些文件捆绑到 cordova_bundled.js 中,然后提供服务。他们是使用 grunt 来执行此操作还是使用 browserify?我从来没有用过咕噜声。
          • 我不知道他们用什么,但你可以通过 Grunt 和 concat 插件 (github.com/gruntjs/grunt-contrib-concat) 连接 JS 文件。您可以指定整个文件夹以连接到单个文件。然后您可以使用 uglify 任务 (github.com/gruntjs/grunt-contrib-uglify) 将您的文件缩小为 .min.js 文件。 Grunt 很容易学习,我认为他们的网站上有很好的资源。如果您有问题,请告诉我,我会帮助您编写代码。
          • 那么,我可以在 grunt 中将 cordova.js 定义为入口文件,它会导航 require 树并正确打包所有内容吗?
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-12-19
          • 1970-01-01
          • 2011-12-24
          • 2014-08-21
          • 1970-01-01
          相关资源
          最近更新 更多