摘要:介紹中文主頁是一套前端自動化構建工具,一個基于的命令行工具它是一個任務運行器配合其豐富強大的插件常用功能合并文件壓縮文件語法檢查預編譯處理其它安裝查看版本創建一個簡單的應用構建生成的文件所在的文件夾
Grunt介紹
中文主頁 : http://www.gruntjs.net/
是一套前端自動化構建工具,一個基于nodeJs的命令行工具
它是一個任務運行器, 配合其豐富強大的插件
常用功能:
合并文件(js/css)
壓縮文件(js/css)
語法檢查(js)
less/sass預編譯處理
其它...
安裝nodejs, 查看版本
node -v
創建一個簡單的應用grunt_test
|- build----------構建生成的文件所在的文件夾 |- src------------源碼文件夾 |- js---------------js源文件夾 |- css--------------css源文件夾 |- index.html-----頁面文件 |- Gruntfile.js---grunt配置文件(注意首字母大寫) |- package.json---項目包配置文件 { "name": "grunt_test", "version": "1.0.0" }
全局安裝 grunt-cli
npm install -g grunt-cli
安裝grunt
npm install grunt --save-dev
運行構建項目命令
grunt //提示 Warning: Task "default" not found
配置文件: Gruntfile.js
此配置文件本質就是一個node函數類型模塊
配置編碼包含3步:
初始化插件配置
加載插件任務
注冊構建任務
基本編碼:
module.exports = function(grunt){ // 1. 初始化插件配置 grunt.initConfig({ //主要編碼處 }); // 2. 加載插件任務 // grunt.loadNpmTasks("grunt-contrib-concat"); // 3. 注冊構建任務 grunt.registerTask("default", []); };
命令: grunt //提示成功, 但沒有任何效果(還沒有使用插件定義任務)
Grunt插件介紹
grunt官網的插件列表頁面 http://www.gruntjs.net/plugins
插件分類:
grunt團隊貢獻的插件 : 插件名大都以contrib-開頭
第三方提供的插件 : 大都不以contrib-開頭
常用的插件:
grunt-contrib-clean——清除文件(打包處理生成的)
grunt-contrib-concat——合并多個文件的代碼到一個文件中
grunt-contrib-uglify——壓縮js文件
grunt-contrib-jshint——javascript語法錯誤檢查;
grunt-contrib-cssmin——壓縮/合并css文件
grunt-contrib-htmlmin——壓縮html文件
grunt-contrib-imagemin——壓縮圖片文件(無損)
grunt-contrib-copy——復制文件、文件夾
grunt-contrib-requirejs——合并壓縮requirejs管理的所有js模塊文件
grunt-contrib-watch——實時監控文件變化、調用相應的任務重新執行
合并js: 使用concat插件
命令:
npm install grunt-contrib-concat --save-dev
編碼:
src/js/test1.js
(function () { function add(num1, num2) { return num1 + num2; } console.log(add(10, 20)); })();
src/js/test2.js
(function () { var arr = [2,3,4].map(function (item, index) { return item+1; }); console.log(arr); })();
配置: Gruntfile.js
配置任務:
concat: { options: { //可選項配置 separator: ";" //使用;連接合并 }, build: { //此名稱任意 src: ["src/js/*.js"], //合并哪些js文件 dest: "build/js/built.js" //輸出的js文件 } }
加載插件:
grunt.loadNpmTasks("grunt-contrib-concat");
注冊任務:
grunt.registerTask("default", ["concat"]);
命令:
grunt //會在build下生成一個built.js
壓縮js: 使用uglify插件
下載
npm install grunt-contrib-uglify --save-dev
配置: Gruntfile.js
配置任務:
pkg : grunt.file.readJSON("package.json"), uglify : { options: { //不是必須的 banner: "/*! <%= pkg.name %> - v<%= pkg.version %> - " + "<%= grunt.template.today("yyyy-mm-dd") %> */" }, build: { files: { "build/js/built-<%=pkg.name%>-<%=pkg.version%>.min.js": ["build/js/built.js"] } } }
加載任務:
grunt.loadNpmTasks("grunt-contrib-uglify");
注冊任務:
grunt.registerTask("default", ["concat", "uglify"]);
命令:
grunt //會在build下生成一個壓縮的js文件
js語法檢查: 使用jshint插件
命令:
npm install grunt-contrib-jshint --save-dev
編碼: .jshintrc
{ "curly": true, "eqeqeq": true, "eqnull": true, "expr" : true, "immed": true, "newcap": true, "noempty": true, "noarg": true, "regexp": true, "browser": true, "devel": true, "node": true, "boss": false, //不能使用未定義的變量 "undef": true, //語句后面必須有分號 "asi": false, //預定義不檢查的全局變量 "predef": [ "define", "BMap", "angular", "BMAP_STATUS_SUCCESS"] }
修改src/js/test1.js
(function () { function add(num1, num2) { num1 = num1 + num3 return num1 + num2; } console.log(add(10, 20)); })();
配置 : Gruntfile.js
配置任務:
jshint : { options: { jshintrc : ".jshintrc" //指定配置文件 }, build : ["Gruntfile.js", "src/js/*.js"] //指定檢查的文件 }
加載任務:
grunt.loadNpmTasks("grunt-contrib-jshint");
注冊任務:
grunt.registerTask("default", ["concat", "uglify", "jshint"]);
命令:
grunt //提示變量未定義和語句后未加分號 -->修改后重新編譯
使用cssmin插件
安裝:
npm install grunt-contrib-cssmin --save-dev
編碼:
test1.css
#box1 { width: 100px; height: 100px; background: red; }
test2.css
#box2 { width: 200px; height: 200px; background: blue; }
index.html
配置 : Gruntfile.js
配置任務:
cssmin:{ options: { shorthandCompacting: false, roundingPrecision: -1 }, build: { files: { "build/css/output.min.css": ["src/css/*.css"] } } }
加載任務:
grunt.loadNpmTasks("grunt-contrib-cssmin");
注冊任務:
grunt.registerTask("default", ["concat", "uglify", "jshint", "cssmin"]);
命令:
grunt //在build/css/下生成output.min.css
使用watch插件(真正實現自動化)
命令: npm install grunt-contrib-watch --save-dev
配置 : Gruntfile.js
配置任務:
watch : { scripts : { files : ["src/js/*.js", "src/css/*.css"], tasks : ["concat", "jshint", "uglify", "cssmin"], options : {spawn : false} } }
加載任務:
grunt.loadNpmTasks("grunt-contrib-watch");
注冊任務:
grunt.registerTask("default", ["concat", "uglify", "jshint", "watch"]); 改進:grunt.registerTask("myWatch", ["default","watch"]);
命令:
grunt //控制臺提示watch已經開始監聽, 修改保存后自動編譯處理
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/112274.html
摘要:是一款流式構建系統,如果說是基于任務執行器,就是基于的文件流任務執行器,比起有如下特點使用方便通過代碼優于配置的策略,可以讓簡單的任務簡單,復雜的任務更可管理。 作者:Jogis原文鏈接:https://github.com/yesvods/Blog/issues/1轉載請注明原文鏈接以及作者信息 showImg(http://itanguo.cn/wp-content/uploads...
閱讀 2655·2021-11-24 10:44
閱讀 1895·2021-11-22 13:53
閱讀 1907·2021-09-30 09:47
閱讀 3704·2021-09-22 16:00
閱讀 2431·2021-09-08 09:36
閱讀 2312·2019-08-30 15:53
閱讀 2790·2019-08-30 15:48
閱讀 976·2019-08-30 15:44