具有Backbone的SPA的Require.js优化器

时间:2013-10-04 10:16:07

标签: javascript node.js backbone.js requirejs

我构建了一个很大的Backbone应用程序(很多视图,模型,集合),并使用require.js进行模块加载。一切都按预期顺利进行。

现在我想将这个应用程序发送到网络,但我想通过压缩(单个?)文件上的所有内容来优化网络请求。我已经阅读了Require.JS Optimizer,安装了node.js并创建了一个构建文件。 这些是我的测试:

  1. 创建一个构建文件,不在模块部分指定单个模块 - >我获得了源应用程序的副本,所有js文件都被丑化了。应用程序有效,但从网络请求的角度来看似乎没有任何改变。

  2. 使用单个模块(即我的main.js文件)创建构建文件 - >我获得了源应用程序的副本,所有js文件都被uglyfied和一个巨大的新main.js文件,我想它包含所有依赖项(即所有使用的文件)。这可以解决网络请求问题,但应用程序根本没有启动,开始给我带来奇怪的错误。

  3. 使用Require.JS优化器的正确方法是什么?我想#2,但你有什么看法?如果这是正确的方法,我应该找出如何解决这些错误......

    由于

    EDITS

    这是我的app文件夹结构:

    app
     |
      --- scripts
             |
             --- libs
             --- collections
             --- views
             --- models
             --- main.js
      --- styles
      --- templates
      --- index.htm
    

    在“app”文件夹的同一级别,我创建了一个包含r.js和build.js的构建文件夹,其内容为:

    ({
        //Directory relativa a questo file dove si trova l'app
        appDir: '../app',
    
        //Directory relativa ad appDir di dove si trovano i moduli
        baseUrl: 'scripts',
    
        //Percorso verso il file main
        mainConfigFile: '../app/scripts/main.js',
    
        paths:
        {
            jquery: 'libs/jquery/jquery-min',
            jqueryui: 'libs/jqueryui/jquery-ui-1.10.2.min',
            underscore: 'libs/underscore/underscore-min',
            backbone: 'libs/backbone/backbone-min',
            kendo: 'libs/kendo/kendo.web.min',
            kendo_it: 'libs/kendo/amd/kendo.culture.it.min',
            relational: 'libs/relational/backbone-relational',
            nested: 'libs/nested/backbone-nested-v1.1.2.min',
            rivets: 'libs/rivets/rivets.min',
            i18n: 'libs/i18next/i18next.amd.withJQuery-1.6.3',
            jvalid: 'libs/jqueryvalidate/jquery.validate.min',
            chartjs: 'libs/chartjs/chart.min',
            toastr: 'libs/toastr/toastr.min',
            templates: '../templates'
        },
    
        //Where to save the output
        dir: '../app-build',
    
        modules:
        [
            {
                name: 'main'
            }
        ]
    
    
    })
    

    我使用此命令启动构建过程:

    node r.js -o build.js
    

    如果我运行“已编译”的main.js,我会收到此错误:

    Uncaught Error: Mismatched anonymous define() module
    

    有什么想法吗?

1 个答案:

答案 0 :(得分:0)

根据您的应用程序的要求,您可以选择

  • 将所有文件连接成单个文件
  • 以模块方式连接

将所有连接到单个文件的东西都适用于小型应用程序,但它不能扩展到更大的应用程序。 requirejs有详细的文档。如果每件事情都是正确的,无论你采用什么方法,都不应该抛出错误。请提供有关您所获得的错误的更多信息,这可能有助于人们正确回答您的问题。