cordova2.4.0或2.5.0或2.6.0和requirejs
cordova2.4.0及以上支持AMD加载到JavaScript。 我特别希望使用最新版本的RequireJS,backbone,jquery,jquery mobile的Cordova 2.5.0。
我还没有看到有关如何使用requirejs正确使用Cordova的新版本的任何教程或发布。 当cordova不支持AMD(2.3.0和之前的版本)的时候,我看到很多关于如何将Cordova和requirejsjoin的post。
如果任何人可以张贴或指向我一个简单的例子,这将不胜感激。
编辑:具体来说,我是针对iOS的发展。
编辑:我想更具体,包括我遇到的确切问题。
main.js
require.config({ paths: { cordova: 'libs/cordova/cordova.ios',//cordova-2.5.0',//2.5.0*/ jquery: 'libs/jquery/jquery.min',//1.9.1 text: 'libs/require/text', domReady: 'libs/require/domReady', underscore: 'libs/underscore/underscore-min', backbone: 'libs/backbone/backbone-min', 'jquery.mobile-config': 'libs/jquery-mobile/jqm-config', 'jquery.mobile': 'libs/jquery-mobile/jquery.mobile.min' }, shim: { backbone: { deps: ['jquery', 'underscore'], exports: 'Backbone' }, underscore: { exports: '_' }, 'jquery.mobile': { deps: ['jquery', 'jquery.mobile-config'] } } }); require(['app'], function(App){ App.initialize(); });
app.js
define([ 'cordova', 'jquery', 'underscore', 'backbone', 'router' ], function(cordova, $, _, Backbone, Router){ var initialize = function(){ Router.initialize(); } return { initialize: initialize }; });
要清楚的是,在优化require.js项目之前,一切正常。 当我尝试用r.js(require.js的一部分)优化项目时,优化器会抛出一个错误,可以在下面看到。
我不确定channel.js是什么,为什么它要求它,但我能在github上find它https://github.com/apache/cordova-js/tree/master/lib/common
一旦我创build了它正在寻找的子目录,我把它放在channel.js文件。 我不再犯这个错误,但是现在又是一个不同的错误,见下文。
我也能在cordova-js github网站上find这个文件。 一旦我将该文件放入子目录中,我不会收到任何错误消息,并且项目成功build立。
现在,当我尝试使用单个优化的js文件运行应用程序时,在javascript控制台中出现此错误,并在设备上出现空白屏幕。
“ReferenceError:无法findvariables:导出”
这是我用来运行优化的build.js文件
({ baseUrl: "../js", mainConfigFile: "../js/main.js", name: "../js/main", out: "../js/big.js", preserveLicenseComments: false, paths: { requireLib: "../js/libs/require/require" }, include: "requireLib" })
编辑4/11/13: 答复感谢SA用户asgeo1的帮助,我得到了我的问题解决。 事实certificate,你不能在main.js'cordova'中命名该variables,因为它与名为'cordova'的内部variables冲突。
解决scheme如下。
main.js
require.config({ paths: { 'cordova.ios': 'libs/cordova/cordova.ios',//cordova-2.5.0' THIS IS CHANGED jquery: 'libs/jquery/jquery.min',//1.9.1 text: 'libs/require/text', domReady: 'libs/require/domReady', underscore: 'libs/underscore/underscore-min', backbone: 'libs/backbone/backbone-min', 'jquery.mobile-config': 'libs/jquery-mobile/jqm-config', 'jquery.mobile': 'libs/jquery-mobile/jquery.mobile.min' }, shim: { backbone: { deps: ['jquery', 'underscore'], exports: 'Backbone' }, underscore: { exports: '_' }, 'jquery.mobile': { deps: ['jquery', 'jquery.mobile-config'] } } }); require(['app'], function(App){ App.initialize(); });
app.js
define([ 'cordova.ios',//THIS IS CHANGED 'jquery', 'underscore', 'backbone', 'router' ], function(cordova, $, _, Backbone, Router){ var initialize = function(){ Router.initialize(); } return { initialize: initialize }; });
这个解决scheme的工作原理是用cordova2.5.0和2.6.0进行testing
我也有同样的问题。 这似乎是他们如何构buildcordova.ios.js文件与Cordova 2.4 / 2.5分发的一个问题
正如您发现的那样,cordova.ios.js文件中的cordova/channel
和cordova/utils
部分的顺序不正确。
这就是为什么RequireJS试图加载单个文件,因为这些模块还没有在cordova.ios.js文件中出现。
不幸的是,当您将channel.js和utils.js文件放入您的项目中时,实际上并没有解决问题的根本原因。
当然,这允许它构build,但ReferenceError: Can't find variable: exports
错误,然后发生,因为RequireJS会把utils.js / channel.js的内容高于cordova.ios.js内容的其余部分 – 这是不好,因为它们依赖cordova.ios.js里面的输出内容。
更何况你现在有两个你的内置文件channel.js / utils.js代码的副本…
解决办法是你必须自己修改cordova.ios.js。 将cordova / channel和cordova / utils移到cordova.ios.js的顶部(但在定义了exports / requirejs之后)
你可以得到一个我自己在这里准备的: https : //gist.github.com/asgeo1/5361227
此外,在main.js中的另一个提示并不是将cordova.ios.js称为“cordova”。 这会冲突,因为cordova.ios.js已经在内部使用这个模块名称。
改用“cordova.ios”:
require.config({ paths: { 'cordova.ios': 'libs/cordova/cordova.ios', ...
要使用延迟加载,一个select是使用requireJS中的domReady插件(参见http://requirejs.org/docs/api.html#pageload )。
一旦requireJS确认DOM已经准备就绪,您就可以使用常规的设备准备监听器等待设备准备就绪。
require(['require/domReady','cordova/cordova-ios-2.5.0'], function (domReady) { domReady(function () { console.log("The DOM is ready - waiting for the device"); document.addEventListener("deviceready", startWhenReady, false); } }); function startWhenReady() { console.log("dom and device ready : we can start..."); // your app }
为我工作!
- 添加或删除cordova / phone间隙中的插件时出错
- 将PDF Viewerembedded到PhoneGap应用程序中
- console.log不能在iOS PhoneGap 3.0应用程序中使用
- 检查与cordovaPhonegap 3.3.0 iOS应用程序无法正常工作的互联网连接
- Phonegap / cordova命令行给出代码签名错误,xcode工作正常。 (IOS)
- meteorcordova生产
- 苹果Mach-O链接器错误在XCode 6.0.1
- 如何监听或绑定在iPhone应用程序中的滚动事件(内置PhoneGap)?
- 自定义Cordova插件:将框架添加到“embedded式二进制文件”