天天看點

自動化建構工具GruntGrunt

Grunt

1 .項目建構

了解:

什麼是項目建構?

  • 編譯項目中的js、sass、less
  • 合并js/css等資源檔案
  • 壓縮js/css/html等資源檔案
  • JS文法檢查
  • 。。。。。

建構工具的作用?

  • 簡化項目建構、自動化完成建構

建構工具

Grunt、Gulp、Webpack

2.Grunt

中文首頁

是一套前端自動化建構工具

建立一個簡單的應用grunt_test

  • 目錄結構
自動化建構工具GruntGrunt
//全局安裝 grunt-cli
npm install -g grunt-cli

//安裝grunt
npm install grunt --save-dev
           
  • 插件分類

grunt團隊貢獻的插件:插件名大都以contribut- 開頭

第三方提供的插件:大都不以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-watch   //實時監控檔案變化、調用相應的任務重新執行
           
  • 使用concat插件
//安裝插件
npm install grunt-contrib-concat --save-dev

//配置任務
grunt.initConfig({
    concat: {
      options: {
        separator: ';',
      },
      dist: {
        src: ['./src/js/*.js'],
        dest: './build/js/build.js',
      },
    },
  });

//注冊任務
grunt.loadNpmTasks('grunt-contrib-concat');

//指令
grunt concat
           
  • 壓縮js:使用uglify插件
//安裝插件
npm install grunt-contrib-uglify --save-dev

//配置任務
pkg: grunt.file.readJSON('package.json'),
    uglify: {
      options: {
        banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' +
          '<%= grunt.template.today("yyyy-mm-dd") %> */'
      },
      build: {
        files: {
          './build/js/build.min.js': ['./build/js/build.js']
        }
      }
    }

//注冊任務
grunt.loadNpmTasks('grunt-contrib-uglify');

//指令
grunt uglify
           
  • 預設任務-任務高效
// 注冊grunt的預設任務  grunt執行任務是同步的
  // 預設被執行的任務清單。
  grunt.registerTask('default', ['concat','uglify']);

//指令
grunt
           
  • 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"]
}

//配置任務
jshint: {
      options: {
        jshintrc: '.jshintrc'   //指定配置檔案
      },
      build: ['Gruntfile.js', 'src/js/*.js']
    }

//注冊任務
grunt.loadNpmTasks('grunt-contrib-jshint');
           
  • 使用cssmin插件
// 安裝插件
npm install grunt-contrib-cssmin --save-dev

// 配置任務
cssmin: {
  options: {
    mergeIntoShorthands: false,
    roundingPrecision: -1
  },
  target: {
    files: {
      'output.css': ['foo.css', 'bar.css']
    }
  }
}

// 注冊任務
grunt.loadNpmTasks('grunt-contrib-cssmin');
           
  • 使用watch插件(真正實作自動化)
//安裝插件
npm install grunt-contrib-watch --save-dev

//配置任務
watch: {
      scripts: {
        files: ['./src/js/*.js','./src/css/*.css'],
        tasks: ['concat','jshint','uglify','cssmin'],
        options: {spawn: false,},
      },
}
  
//注冊任務
  grunt.loadNpmTasks('grunt-contrib-watch');
  
//預設被執行的任務清單。
 grunt.registerTask('myWatch',['default', 'watch']);
           

繼續閱讀