有些時候,項目中的靜態資源,好比圖片佔用的文件有點大,影響加載的速度,因此會選擇grunt對其進行壓縮打包。對於grunt其餘的用法,還在繼續學習中,先記錄下關於grunt的一些學習。css
grunt是一套基於Node.js的命令行工具,因此先確保環境中已安裝好了Node環境。node
接着安裝grunt,以下:npm
一、安裝CLIjson
CLI是grunt命令行,先將其安裝到全局環境中。點擊開始->運行->cmd,執行如下命令進行安裝:app
npm install -g grunt-cli函數
安裝一次便可,之後就能夠在任何項目的子目錄下運行grunt,執行grunt命令。grunt
二、配置package.json和Gruntfile文件 工具
這兩份文件須要添加在項目裏的,且要在同一個目錄下。如tool文件所示。學習
以壓縮css文件下的style.css、images文件、js文件下的flex.js爲例:flex
① package.json
用於存儲項目的元數據,在此文件中列出項目依賴的grunt和Grunt插件,即Gruntfile.js中定義的任務,放置於devDependencies配置段內。
{ "name": "demo", "version": "1.0.0", "description": "", "license": "ISC", "devDependencies": { "grunt": "^0.4.5", "grunt-autoprefixer": "^3.0.4", "grunt-contrib-cssmin": "^1.0.1", "grunt-contrib-imagemin": "^1.0.0", "grunt-contrib-uglify": "^0.11.1" } }
② Gruntfile文件
Gruntfile.js或者Gruntfile.coffee,用來配置或定義任務(task)並加載Grunt插件的。
(1)''wrapper''函數
module.exports = function (grunt) { // ... }
(2)項目/任務配置
用initConfig方法將存儲在package.json文件中的JSON元數據讀取引入到grunt config中。
grunt.initConfig({ // 從package.json讀取配置信息 pkg: grunt.file.readJSON('package.json'), ...... })
爲系統配置任務,如imagemin圖片壓縮,主要是找到要壓縮的圖片路徑src,設置壓縮後的存放路徑dest。
imagemin: { /* 壓縮圖片大小 */ dist: { options: { optimizationLevel: 3 //定義 PNG 圖片優化水平 }, files: [ { expand: true, cwd: '../images/', src: ['**/*.{png,jpg,jpeg}'], // 優化 img 目錄下全部 png/jpg/jpeg 圖片 dest: '../static/images' // 優化後的圖片保存位置,覆蓋舊圖片,而且不做提示 } ] } }
(3)加載imagemin插件
grunt.loadNpmTasks('grunt-contrib-imagemin');
(4)執行imagemin任務
grunt.registerTask('images', ['imagemin']);
完整配置代碼以下:
module.exports = function (grunt) { 'use strict'; grunt.initConfig({ // 從package.json讀取配置信息 pkg: grunt.file.readJSON('package.json'), imagemin: { /* 壓縮圖片大小 */ dist: { options: { optimizationLevel: 3 //定義 PNG 圖片優化水平 }, files: [ { expand: true, cwd: '../images/', src: ['**/*.{png,jpg,jpeg}'], // 優化 img 目錄下全部 png/jpg/jpeg 圖片 dest: '../static/images' // 優化後的圖片保存位置,覆蓋舊圖片,而且不做提示 } ] } }, uglify: { options: { sourceMap: false, banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'//壓縮文件頭部註釋 }, dist: { files: [{ expand:true, cwd:'../js/',//js目錄下 src:'**/flex.js',//js下的flex.js文件,如果因此js文件,則爲**/*.js dest: '../static/js'//壓縮後的文件輸出到此目錄下 } ] } }, autoprefixer: { options: { // Task-specific options go here. }, dist: { files: [{ expand:true, src:['../css/style.css'],//css文件下的style.css dest: '../static/css/'//輸出到此目錄下 }] } }, cssmin: { dist: { files: [ { expand:true, cwd:'../css/',//css目錄下 src:['**/style.css'],//全部css文件 dest: '../static/css'//輸出到此目錄下 } ] } } }); // 加載包含相似"imagemin"任務名的插件 grunt.loadNpmTasks('grunt-contrib-imagemin'); grunt.loadNpmTasks('grunt-contrib-cssmin'); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-autoprefixer'); // 默認被執行的任務列表 grunt.registerTask('default', ['uglify','autoprefixer','cssmin','imagemin']); grunt.registerTask('autopre', ['autoprefixer']); grunt.registerTask('css', ['autoprefixer','cssmin']); grunt.registerTask('images', ['imagemin']); grunt.registerTask('js', ['uglify']); };
三、執行命令
配置好package.json和Gruntfile.js後,在包含該文件的目錄下,先執行npm install命令安裝項目依賴的庫,會生成tool文件下的node_modules文件。
npm install
其次,執行grunt命令
grunt
四、壓縮完成,生成static文件夾存放壓縮後的文件,以下
grunt中文網:http://www.gruntjs.net/