Grunt 是JS的任務自動化工具。假設咱們使用它來作js文件的混淆,咱們須要以下組件:node
grunt-cli 命令行
grunt grunt組件
grunt-contrib-uglify-es 代碼混淆組件
複製代碼
首先安裝在繼續學習前,你須要先將Grunt命令行(CLI)安裝到全局環境中,把另外兩個加入到本地開發依賴中:npm
npm install -g grunt-cli
npm install grunt --save-dev
npm install grunt-contrib-uglify-es --save-dev
複製代碼
假定你有一個項目,應該有一個配置好package.json
,咱們可使用以下命令生成此文件:json
npm init -y
複製代碼
假設一個action.js
文件,內容以下:函數
console.log(`42`)
複製代碼
想要把任務自動化跑起來,還須要一個Grunt配置文件:grunt
touch Gruntfile.js
複製代碼
Grunt 配置中, grunt-contrib-uglify 插件中的uglify 任務:工具
module.exports = function(grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
src: 'action.js',
dest: 'action.min.js'
}
}
});
// 加載包含 "uglify" 任務的插件。
grunt.loadNpmTasks('grunt-contrib-uglify-es');
// 默認被執行的任務列表。
grunt.registerTask('default', ['uglify']);
};
複製代碼
前面已經向你展現了整個 Gruntfile,接下來將詳細解釋其中的每一部分。學習
如今能夠指定grunt命令了:ui
grunt
複製代碼
你能夠在當前目錄內發現生成的action.min.js
文件。它是action.js
的混淆版本。你能夠試試:spa
node action.min.js
複製代碼
和: node action.js插件
你會發現它們的執行效果是同樣的。
你所書寫的做爲配置的代碼,都必須放在此函數內:
module.exports = function(grunt) {
// 你的代碼
};
複製代碼
###項目和任務配置
若是任務須要引用package.json
的話,可使用:
grunt.file.readJSON('package.json')
複製代碼
將存儲在package.json文件中配置引入進來。而後就能夠經過形如<% %>
的模板字符串來引用配置屬性:
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
複製代碼
與大多數task同樣,grunt-contrib-uglify-es 插件中的uglify 任務要求它的配置被指定在一個同名屬性中。也就是uglify
內
build: {
src: 'src/<%= pkg.name %>.js',
dest: 'build/<%= pkg.name %>.min.js'
}
}
複製代碼
build
內的src
指定了uglify
任務的源文件,dest
指定uglify
的目的文件。
只要在 package.json 文件中被列爲依賴包,並經過npm install安裝以後,均可以在Gruntfile中以簡單命令的形式使用:
// 加載可以提供"uglify"任務的插件。
grunt.loadNpmTasks('grunt-contrib-uglify-es');
複製代碼
經過定義 default 任務,可讓Grunt默認執行一個或多個任務:
// Default task(s).
grunt.registerTask('default', ['uglify']);
複製代碼
相似grunt-contrib-uglify
這些經常使用的任務,都已經以grunt插件的形式被開發出來了:
concatenation 文件鏈接工具
minification 文件壓縮工具
linting 代碼規範工具
複製代碼
用法都是相似的。