使用Require.js进行项目优化

时间:2013-12-29 17:08:25

标签: javascript node.js requirejs

我在缩小申请时遇到了问题。我的目标是尽可能少的Javascript文件。我得到部分结果,我能够连接lib /文件夹中的所有文件。它们都捆绑在main.js文件中,并且工作正常。

但是,其余的应用程序文件没有捆绑在一个文件中,它们只是缩小和缩小。

我正在使用node使用此命令启动进程:

节点r.js -o build.js

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

  
      
  • CSS
  •   
  • IMG
  •   
  • JS   
        
    • 集合
    •   
    • 模型
    •   
    • LIB
    •   
    • 路由器
    •   
    • 浏览
    •   
    • 控制器
    •   
  •   
  • 模板(车把文件)
  •   
  • app.js
  •   
  • main.js
  •   
  • config.js
  •   
  • r.js
  •   
  • build.js
  •   

我的build.js文件:

({
appDir: './',
baseUrl: './js',
dir: './dist',
modules: [
    {
        name: 'main'
    }
],
fileExclusionRegExp: /^(r|build)\.js$/,
optimizeCss: 'standard',
removeCombined: true,
paths: {
    underscore        : 'lib/underscore',
    backbone        : 'lib/backbone',
    babysitter  : 'lib/backbone.babysitter',
    wreqr       : 'lib/backbone.wreqr',
    marionette        : 'lib/backbone.marionette',
    handlebars  : 'lib/handlebars',
    jquery                : 'lib/jquery',
    jqueryui        : 'lib/jqueryui',
    text        : 'lib/text',
    templates   : '../templates'
},
shim: {
    underscore: {
        exports: '_'
    },
    backbone: {
        exports: 'Backbone',
        deps: ['jquery', 'underscore']
    },
    jqueryui: {
        exports: '$',
        deps: ['jquery']
    },
    babysitter: {
        exports: 'Backbone.Babysitter',
        deps: ['backbone']
    },
    wreqr: {
        exports: 'Backbone.Wreqr',
        deps: ['backbone']
    },
    marionette: {
        exports: 'Backbone.Marionette',
        deps: [
            'backbone',
            'babysitter',
            'wreqr',
            'lib/json2'
        ]
    },
    handlebars: {
        exports: 'Handlebars'
    },
    'lib/marionette.handlebars': {
        exports: 'Marionette.Handlebars',
        deps: ['handlebars', 'marionette']
    }
    'lib/foundation.reveal': {
        exports: '$',
        deps: ['lib/foundation']
    },
    'lib/foundation.dropdown': {
        exports: '$',
        deps: ['lib/foundation']
    }
},
deps: ['jquery', 'underscore']
})

这是我的main.js文件:

require.config({
baseURL: '.',
urlArgs: "ver=2", //Control Client Cache. Change this value for every new release.
paths: {
    underscore          : 'lib/underscore',
    backbone          : 'lib/backbone',
    babysitter    : 'lib/backbone.babysitter',
    wreqr         : 'lib/backbone.wreqr',
    marionette          : 'lib/backbone.marionette',
    handlebars    : 'lib/handlebars',
    jquery                  : 'lib/jquery',
    jqueryui          : 'lib/jqueryui',
    text          : 'lib/text',
    templates     : '../templates'

},
waitSeconds: 60,
shim: {

    underscore: {
        exports: '_'
    },
    backbone: {
        exports: 'Backbone',
        deps: ['jquery', 'underscore']
    },
    jqueryui: {
        exports: '$',
        deps: ['jquery']
    },
    babysitter: {
        exports: 'Backbone.Babysitter',
        deps: ['backbone']
    },
    wreqr: {
        exports: 'Backbone.Wreqr',
        deps: ['backbone']
    },
    marionette: {
        exports: 'Backbone.Marionette',
        deps: [
            'backbone',
            'babysitter',
            'wreqr',
            'lib/json2'
        ]
    },
    handlebars: {
        exports: 'Handlebars'
    },

    'lib/marionette.handlebars': {
        exports: 'Marionette.Handlebars',
        deps: ['handlebars', 'marionette']
    },
    'lib/foundation': {
        exports: '$',
        deps: ['jquery']
    },
    'lib/foundation.orbit': {
        exports: '$',
        deps: ['lib/foundation']
    },
    'lib/foundation.reveal': {
        exports: '$',
        deps: ['lib/foundation']
    },
    'lib/foundation.dropdown': {
        exports: '$',
        deps: ['lib/foundation']
    }
},
deps: ['jquery', 'underscore']
});

require(['app', 'backbone', 'config'], function(App, Backbone, Config) {
App.start(Config);
});

1 个答案:

答案 0 :(得分:0)

我想是时候回答我自己的问题了。在构建文件中(您可以根据需要命名),只需添加此参数,所有内容都将很好地捆绑在一个文件中:

 findNestedDependencies: true,