Grunt 簡單入門

jopen 10年前發布 | 101K 次閱讀 Grunt Node.js 開發

Grunt 是一個基于Nodejs的自動化任務執行工具。那么什么是任務執行工具呢,其實就是按照之前編定好的規則執行任務的一個工具。

下面是Grunt的簡單使用方法。

安裝Grunt

首先要安裝nodejs(包含npm)。通過 npm install -g grunt來安裝grunt。這個命令僅僅安裝了grunt命令行接口(grunt-cli),還不能在文件夾里運行,需要配置完成才可以。

配置Grunt

Grunt要向運行必須得在在文件夾根目錄下找到配置文件 Gruntfile.js, 而 Gruntfile.js依賴與nodejs的配置文件 package.json 。所以項目根目錄下得有package.jsonGruntfile.js兩個配置文件。package.json可以通過 node init來生成,而 Gruntfile.js好像得手工創建。

Gruntfile.js內的代碼包括四個主要元素:

  • 包裹函數
  • 項目和任務配置
  • 加載Grunt插件和任務
  • 自定義任務

下面先貼上整體配置文件再一一分析

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    uglify: {
      options: {
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
      },
      build: {
        src: 'src/<%= pkg.name %>.js',
        dest: 'build/<%= pkg.name %>.min.js'
      }
    }
  });

  // Load the plugin that provides the "uglify" task.
  grunt.loadNpmTasks('grunt-contrib-uglify');

  // Default task(s).
  grunt.registerTask('default', ['uglify']);
};

其中

module.exports= function (grunt) {
}

既為包裹函數,其內部的

grunt.initConfig({})

就是Grunt 項目配置函數。這個對象{}既為配置對象。配置對象內又有各個 任務的配置。
其中 pkg:grunt.file.readJSON('package.json')是讀取根目錄總的pakcage.json文件,作為配置對象的一個屬性 pkg,以方便后面的配置使用。

uglify: {
      options: {
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
      },
      build: {
        src: 'src/<%= pkg.name %>.js',
        dest: 'build/<%= pkg.name %>.min.js'
      }
    }

就是一個任務配置對象,屬性名必須與插件名稱一致。其中的 options是這個任務的 任務級配置build是一個 目標,一個任務可以包含多個目標,目標名稱命名規范與js命名規范一樣(也就是說可以隨意取)。每個目標內還可以有 目標級配置
目標內的 src屬性為源文件,dest為目標文件(保存任務執行結果)。
<% %>是模版,模版內可以運行javascript代碼,可以訪問任務配置對象內的屬性。

項目配置完成后需要加載Grunt插件 grunt.loadNpmTasks('grunt-contrib-uglify')
最后是自定義任務(可選) grunt.registerTask('default', ['uglify']);

執行Grunt任務

運行之前要確保Gruntfile.js中加載的插件已經安裝了,如果為安裝可以通過 npm install 插件名 --save-dev來安裝,例如: npm install grunt-contrib-ublify --save-dev
如果像上面一樣配置了自定義任務,直接運行 grunt就可以執行 uglify任務了。如果沒有配置default,則需要 grunt uglify 來執行 uglify任務。執行 uglify任務時會按順序執行它的各個目標,亦可以通過 grunt uglify:build來單獨執行某個目標。

官方樣例

這里再貼一個官方提供的 Gruntfile.js樣例

module.exports = function(grunt) {

  grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    concat: {
      options: {
        separator: ';'
      },
      dist: {
        src: ['src/**/*.js'],
        dest: 'dist/<%= pkg.name %>.js'
      }
    },
    uglify: {
      options: {
        banner: '/*! <%= pkg.name %> <%= grunt.template.today("dd-mm-yyyy") %> */\n'
      },
      dist: {
        files: {
          'dist/<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>']
        }
      }
    },
    qunit: {
      files: ['test/**/*.html']
    },
    jshint: {
      files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],
      options: {
        // options here to override JSHint defaults
        globals: {
          jQuery: true,
          console: true,
          module: true,
          document: true
        }
      }
    },
    watch: {
      files: ['<%= jshint.files %>'],
      tasks: ['jshint', 'qunit']
    }
  });

  grunt.loadNpmTasks('grunt-contrib-uglify');
  grunt.loadNpmTasks('grunt-contrib-jshint');
  grunt.loadNpmTasks('grunt-contrib-qunit');
  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-contrib-concat');

  grunt.registerTask('test', ['jshint', 'qunit']);

  grunt.registerTask('default', ['jshint', 'qunit', 'concat', 'uglify']);

};

這個樣例基本可以對付大多數任務了,具體詳細的配置可以看官方文檔

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!