requirejs 多頁面,多js 打包代碼,requirejs多對多打包【收藏】

這段代碼來自html

http://stackoverflow.com/questions/20583812/grunt-requirejs-optimizer-for-a-multi-app-projectjquery

之前用 requirejs和r.js  也作過打包demo,git

demo 你們懂得,1個頁面10多個js。。。。。。。。github

此次計劃給公司的項目打包web

由於通常狀況下,大部分項目都是多頁面不多有項目是單頁面應用程序cookie

而 r.js 默認打包支持兩種狀況app

1 全部js文件打包到1個文件jsp

2 在1的基礎上能夠給js按照模塊分組,支持多個模塊在1個js文件中grunt

  BUT 都是最終歸結爲1個js文件。。。。。。requirejs

可是這不是我想要的,我就想要一個頁面相關的js打包成一個js文件包,每一個頁面都有本身的js文件包

方法很簡單 基於grunt+grunt-contrib-requirejs

具體配置在這裏https://github.com/qqqzhch/webfans/blob/master/Gruntfile.js

    // r.js 打包 準備
    var files = grunt.file.expand('js/app/*/main.js'); //讀取要打包的js入口 通常都爲 main的js
    var requirejsOptions = {}; //用來存儲 打包配置的對象

    //遍歷文件
    files.forEach(function(file) {
        var filenamelist = file.split('/');
        var num = filenamelist.length;
        var filename = filenamelist[num - 2]; //獲取目錄名稱,由於這裏的文件名都是main的js
        requirejsOptions[filename] = {
            options: {
                baseUrl: "js/",
                paths: {
                    "text": 'lib/text',
                    "jquery": 'lib/jquery',
                    "backbone": 'lib/backbone',
                    "underscore": 'lib/underscore',
                    "Highcharts": 'lib/highcharts/highcharts',
                    "select2": 'lib/select2/select2',
                    "moment": 'lib/moment',
                    "jquery-ui": 'lib/jquery-ui/jquery-ui',
                    "jquery.cookie": 'lib/jquery.cookie',
                    "validate": 'lib/jquery.validate',
                    "metadata": 'lib/jquery.metadata',
                    "jsplumb": "lib/jquery.jsPlumb",
                    "qtip": 'lib/qtip/jquery.qtip',
                    "nicescroll": "lib/jquery.nicescroll",
                    "Htheme": 'lib/highcharts/theme',
                    'jquery.mousewheel': 'lib/jquery.mousewheel'
                },
                optimizeAllPluginResources: true,
                name: 'app/' + filename + '/main',
                out: 'js/appbuild/' + filename + '/main.js'
            }
        };
    });
    //

經過觀察咱們能夠發現,配置和r.js 的build.js 是一致的,而後按照文件名存貯到對象中,

對與和grunt的配置則簡單多了

//*****省略其餘代碼
        requirejs: requirejsOptions


    });
    // Default task(s).
    grunt.registerTask('dev', [
        'compass:force',
        'connect:server',
        'watch'
    ]);
    grunt.registerTask('dist', [
        'compass:force'
    ]);
    grunt.registerTask('js', ['requirejs']);

運行結果以下

image

觀察每一個打包後的js文件,發現根據依賴打包,果真強悍,作到了每一個頁面js的插件數量恰好知足這個頁面的需求,作到每一個頁面的代碼都是最少的,可見多對多打包仍是挺不錯的

相關文章
相關標籤/搜索