RequireJs 提供了一個打包工具 r.js,能夠將相關的模塊打包爲一個文件。相關說明:http://www.requirejs.org/docs/optimization.htmlhtml
雖然能夠經過命令行來使用這個打包工具,可是在 Grunt 中也提供了相應的插件來自動完成這個任務。java
地址:https://github.com/gruntjs/grunt-contrib-requirejs node
npm install grunt-contrib-requirejs --save-dev
控制檯輸出jquery
grunt-contrib-requirejs@0.4.4 node_modules\grunt-contrib-requirejs └── requirejs@2.1.20
在 Gruntfile.js 文件中,使用 grunt.loadNpmTasks 來加載這個任務。git
grunt.loadNpmTasks('grunt-contrib-requirejs');
module.exports = function(grunt) { // Project configuration. grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), copy: { dev: { files: [ {expand: true, src: ['src/**/*.js'], dest: 'public/js', filter: 'isFile'} ] } }, requirejs: { compile: { options: { name: "main", baseUrl: "src/js", mainConfigFile: "main.js", out: "public/js/main.js" } } } }); // 加載包含 "copy" 任務的插件。 grunt.loadNpmTasks('grunt-contrib-copy'); grunt.loadNpmTasks('grunt-contrib-requirejs'); // 默認被執行的任務列表。 grunt.registerTask('default', ['uglify']); };
compile 是咱們爲任務所起名稱,options 中是相應的配置。angularjs
在使用這個緊縮任務的時候,默認是不包含 require.js 庫的,因此有兩種用法。github
第一種用法,只緊縮咱們定義的模塊,這樣緊縮出來的結果中,會包含 require 過的第三方庫,好比 jquery, angularjs 等等,可是不會包含 requirejs 自己。因此,咱們須要在頁面中先引用 require.js 庫,而後引用咱們緊縮的結果。npm
requirejs: { compile: { options: { name: "main", baseUrl: "src/js", mainConfigFile: "main.js", out: "public/js/main.js" } } }
第二種用法,直接將 require.js 也包含進來,這樣,只須要在頁面中引用緊縮的結果便可。json
先經過 paths 給 require.js 起一個名稱,而後在 include 中包含這個模塊。api
//Set paths for modules. If relative paths, set relative to baseUrl above. //If a special value of "empty:" is used for the path value, then that //acts like mapping the path to an empty file. It allows the optimizer to //resolve the dependency to path, but then does not include it in the output. //Useful to map module names that are to resources on a CDN or other //http: URL when running in the browser and during an optimization that //file should be skipped because it has no dependencies. paths: { "requireLib": "lib/require" }, include: ["requireLib"],
在使用 almond 的時候,其實更加簡單了。
咱們將 name 設置爲 almond 的路徑,而後使用 include 將咱們實際的入口模塊包含進來就能夠了。
這裏須要注意一點,almond 是一個獨立的腳本庫,你須要本身將這個庫下載來下,直接使用 bower 就能夠。而後,設置 name 爲相對於 baseUrl 的 almond 庫路徑便可。
requirejs: { compile: { options: { baseUrl: "tmp", mainConfigFile: "tmp/main.js", include: "main", name: "../bower_components/almond/almond", out: "tmp/<%= pkg.name %>.js" } } }
注意,上面的官方實例中沒有使用 include 包含實際的入口。結果就是不會執行的你的腳本。