optimization - jQuery 作为 AMD 模块并使用 r.js 进行优化

标签 optimization node.js requirejs js-amd

好吧,他就是这样。我正在为我的 AMD 加载器使用curl.js,但我不太喜欢“cram”,因为它需要在 unix 上运行,而我正在 Windows 上开发。因此,我们想到了 RequireJS 库中适用于 NodeJS 的 r.js 适配器,因为 Node 已经有适用于 Windows 的二进制文件。

现在当前版本(1.6.4)中的 jQuery 不是有效的 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' }
    ]
})

这里是完整的 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
    )

提前感谢您提供任何线索,可以发现...

最佳答案

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

另外: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
});

关于optimization - jQuery 作为 AMD 模块并使用 r.js 进行优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7625264/

相关文章:

mysql - 我应该在删除多行后重置表索引/优化吗?

javascript - 使用node.js解析多维人口普查数据

linux - Linux 3.2 内核与 2.6 内核的不平衡套接字接受

less - 如何使用 require.js 包含 less.js

javascript - 将异步 requirejs 完成回调值返回给外部函数

c# - 从多个列表或数组中搜索/过滤(可能数十亿)项目组合的最佳方式

java - 现代 JVM 是否优化了简单的内联匿名类分配?

c++ - 数组变量中有更多变量还是多一维?

node.js - Nodemailer 仅适用于一个电子邮件地址

javascript - Backbone 为空