2013-10-04 25 views
1

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

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

  1. 创建构建文件没有指定模块部分单个模块 - >我获得源应用程序的一个副本,其中uglyfied所有js文件。应用程序可以工作,但从网络请求的角度看,似乎没有任何变化。

  2. 使用单个模块(即我的main.js文件)创建构建文件 - >我获得源应用程序的副本,其中所有js文件都很糟糕,并且我假设有一个巨大的新main.js文件它包含了它的所有依赖关系(即所有使用的文件)。这将解决网络请求问题,但该应用程序根本不启动,开始给我奇怪的错误。

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

感谢

编辑

这是我的应用程序文件夹结构:

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

在我创建了一个包含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 

任何想法?

回答

0

根据应用程序的需求,你可以选择

  • 串连所有文件到单个文件
  • 拼接模块明智

有串联到单个文件的每一件事情非常适用于小型应用程序,但它不会扩展到更大的应用程序。 requirejs有这方面的详细文档。如果每件事情都是对的,无论采用什么方法,都不应该抛出错误。请提供更多关于您遇到的错误的信息,这可能会帮助人们正确回答您的问题。

+0

我有一个文件夹叫我的应用程序里面的应用程序。在同一级别的应用程序中,我有另一个名为build的文件夹,其中包含r.js和build.js,这是一个配置文件,可以在Require.js网站上找到。我在该文件中定义了appDir,baseUrl,mainConfigFile,dir,路径和模块参数。如果我在构建文件夹内使用命令“node r.js -o build.js”启动构建,几分钟后,我有另一个文件夹,其中包含所有应用程序+“concatendated”main.js.如果我尝试运行该应用程序,则会出现此错误:“未捕获的错误:不匹配的匿名define()模块”。 – Marconline

+0

这会帮助吗? http://stackoverflow.com/questions/15371918/mismatched-anonymous-define-module –