这段代码来自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']);
运行结果以下
观察每一个打包后的js文件,发现根据依赖打包,果真强悍,作到了每一个页面js的插件数量恰好知足这个页面的需求,作到每一个页面的代码都是最少的,可见多对多打包仍是挺不错的