grunt是一個前端自動化工具,用於文件壓縮、合併、錯誤檢查等。javascript
grunt是經過npm管理的,npm是nodejs的包管理器,因此安裝grunt前要確保電腦安裝了nodejs和npm。css
安裝過程前端
ps:經過npm安裝不少系統須要sudo權限。java
首先安裝grunt的命令行CLI到全局node
npm install -g grunt-clinpm
grunt-cli的做用是能夠讓多個版本的grunt同時存在(至關於grunt的一個構建工具)json
grunt的核心就是Gruntfile.js文件的管理數組
咱們建立一個項目目錄,文件中要有兩個文件grunt
Gruntfile.js就是grunt執行的js,用於配置咱們須要grunt執行哪些操做(js合併、檢錯等等)工具
package.json至關於一個項目管理文件(用於配置項目名字、版本、一些依賴包等等)
//package.json { "name": "project-name", "version": "1.0.0", "devDependencies": { } }
建立好項目目錄後,咱們在項目目錄中安裝grunt
npm install grunt --save-dev
這時咱們在項目目錄中會看到多了一個node_modules文件夾,文件夾中多了一個grunt文件夾,說明grunt已經安裝成功
再看package.json中devDependencies對象中多了一條gurnt的配置,這就是-dev的做用(會把安裝依賴包信息寫到package.json中)
下面進行Gruntfile.js的配置
ps:再沒有配置的狀況下,終端輸入grunt會有錯誤提示信息
下面先進行一個簡單配置
module.exports = function(grunt){ grunt.initConfig({ pkg:grunt.file.readJSON('package.json') }) grunt.registerTask('default',[]); }
咱們對package.json文件進行了一次read操做,這時候就沒有報錯了
這個過程能夠忽略,下面進行gurnt插件安裝和配置
uglify:用於js文件的壓縮
插件安裝:npm install grunt-contrib-uglify --save-dev
先搞一個測試文件:當前目錄建立個src文件夾,文件夾中新建一個testJs.js文件,文件裏隨便寫點js代碼就行
而後配置Gruntfile.js文件
grunt.initConfig({ pkg:grunt.file.readJSON('package.json'), uglify:{ options:{ stripBanners: true, banner: '/*! <%=pkg.name%>-<%=pkg.version%>.js <%=grunt.template.today("yyyy-mm-dd")%> */\n' }, build:{ src: 'src/testJs.js', dest: 'bulid/<%=pkg.name%>-<%=pkg.version%>.js.min.js' } } }) grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.registerTask('default',['jshint']);
options中規定容許生成的壓縮文件帶banner,即在生成的壓縮文件第一行加一句話說明
build中配置了輸入輸出文件的目錄和名字
插件被安裝後,要在在你的gruntfile.js中執行grunt.loadNpmTasks
grunt.registerTask是讓插件馬上執行,第二參數是數組,用於gurnt插件的執行順序
最終在目錄中多了一個build文件夾,裏面生產了一個testJS的壓縮文件,內容以下
其餘插件同理,直接放代碼了
grunt.initConfig({ pkg:grunt.file.readJSON('package.json'), uglify:{ options:{ stripBanners: true, banner: '/*! <%=pkg.name%>-<%=pkg.version%>.js <%=grunt.template.today("yyyy-mm-dd")%> */\n' }, build:{ src: 'src/testJs.js', dest: 'bulid/<%=pkg.name%>-<%=pkg.version%>.js.min.js' } }, jshint:{ options:{ jshintrc:'.jshintrc' }, build:['Gruntfile.js','src/*.js'] }, watch:{ build:{ files:['src/*.js','src/*.css'], tasks:['jshint','uglify'], options:{spawn:false} } } }) grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.loadNpmTasks('grunt-contrib-jshint'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.registerTask('default',['jshint','uglify','watch']);
其中watch插件用於監聽,當咱們保存代碼時,watch會自動執行(不用每次在終端輸入grunt了)
ps