2011-10-02 55 views
1

好吧,他是事情。我为我的AMD加载器使用curl.js,但是我不喜欢很多“cram”,因为它需要在unix上运行,而且我正在Windows上开发。因此,记住RequireJS库中的nodeJS的r.js适配器,因为节点已经是Windows的二进制文件。jQuery作为AMD模块并使用r.js进行优化

现在jQuery的当前版本(1.6.4)是无效的AMD模块(1.7版本即将)并且在jQueryUI的组件具有依赖性,所以我不得不假像这样:

curl([js!Core/jquery.js]) 
    .then(function() { 
     define('jquery', function() { return jQuery; }); 
    }) 

我的应用程序对此感到满意。然而,使用r.js(0.26.0版本),该部件有以下错误失败:

Tracing dependencies for: boot 
function(){return jQuery} 

node.js:207 
    throw e; // process.nextTick error, or 'error' event on first tick 
     ^
ReferenceError: jQuery is not defined 
at eval at <anonymous> (r.js:7468:30) 
at main (r.js:770:33) 
at callDefMain (r.js:840:18) 

这是我app.build.js

({ 
    appDir: '../', 
    baseUrl: 'Scripts/', 
    paths: { 
     'link': '../../../Lib/@Javascript Libs/curl.js/src/curl/plugin/link.js' 
    }, 
    dir: 'built', 
    optimize: 'none', 
    modules: [ 
     { name: 'boot' } 
    ] 
}) 

这里是完整的启动。 JS供参考(CoffeeScript的):

require([ 
    'link!styles/main.css' 
    'js!Core/jquery.js!order' 
    'js!Core/underscore.js!order' 
    'js!Core/backbone.js!order' 
]).then -> 
    define 'jquery', -> jQuery 

.next(['Router/MainRouter']) 
.then (MainRouter) -> 
    new MainRouter() 
    Backbone.history.navigate('home') unless Backbone.history.start(
     pushState: false 
    ) 

预先感谢您的任何暗示,其中捕捉可以...

+0

哦,我想知道发生了什么在那里。 RequireJS没有使用基于承诺的AMD加载,所以它不理解那些“那么”和“下一个”函数,并试图在真正加载之前定义jquery ......任何想法我能做些什么? – FredyC

回答

0

正确。 RequireJS在其全局requirejs()(又名require())函数上使用不同的语法。 RequireJs也没有“js!”内置插件。您可能必须在您的配置中包含路径。你也可以使用RequireJS的语法来处理非模块化JavaScript文件。

另外:cram 0.2将支持使用Rhino的Windows环境。我们正在为cram 0.2编写测试,并且很快就会发布。

RequireJS语法(删除JS前缀和包括.js扩展!):

require([ 
    'link!styles/main.css' 
    'order!Core/jquery.js' 
    'order!Core/underscore.js' 
    'order!Core/backbone.js' 
], function (maincss, jQuery, underscore, backbone) { 
    // do something here 
}); 
+0

谢谢,期待补习0.2。 – FredyC