初学,目前对grunt的理解和需求仅在于简单的文件合并、压缩、语法检查,其强大功能还有待研究。
安装前环境准备
(1)grunt依赖nodejs运行环境,所以要玩grunt得先把nodejs安装好,nodejs安装复杂不?一点不复杂,文件也不大,直接下载安装即可。
nodejs下载地址:http://nodejs.org/
安装grunt
(1)安装好nodejs后,就可以安装grunt。grunt安装是不是也要下载个安装文件?度娘和google发现,都是采用npm这个玩儿来安装,具体采用文件安装没研究。
ps:npm是nodejs中包管理和分发的工具,咱们上面安装nodejs时,就安装好了,所以这里直接使用即可。
安装grunt命令:npm install -g grunt-cli
ps:注意一定要加-cli,文档上说这玩儿会将grunt加入到系统变量中,这样就可以到处使用了,当然如果不加,可能需要自己手动去配置环境变量
至此:grunt安装完毕
使用grunt创建项目
通过上面的步骤,grunt已经ok了,接下来就是用其创建项目。你可能有疑问?“哥只想用期来合并、压缩文件,用得到创建个项目吗?”。对于这个问题得先理解好grunt。
(1)grunt是一个项目构建环境,这个有点类似于ant。grunt本身并没有提供“啥合并、压缩”功能。
(2)这里的创建工程,其实就是grunt根据你的配置文件,加载好相关包,完成一个你想要实现的目标。比如说,你想要“合并文件”这个功能,那么就得告诉grunt,它会根据这个配置为你创建好一个具有“合并文件”功能的“可执行程序”。
那如何创建项目呢?
(1)得先为咱们将要创建的项目建立一个空文件夹,如“d:\javascriptDemo”,咱们后面的命令创建步骤仅在此项目下,即在这个文件夹下执行命令。
(2)上面提到,grunt创建项目要先有配置文件。也就是说在创建项目之前,咱们得先搞个配置文件,这个配置文件就是package.json。哥手上没有这玩儿,不怕,咱们的npm会创建这东西。
执行:npm init 即可创建package.json配置文件,该命令过程中会提示输入一些参数,比如项目描述、git地址、作者、密码等,如下图,其中出现的json数据就是该文件夹的内容:
不过有点可惜,采用npm init创建的配置文件似乎不是我们所需要的“文件压缩、合并”功能的配置文件,对于这种情况,其实百度一下找个模板即可。package.json文件压缩、合并配置模板如下:
{
"name": "demo",
"file": "jquery.calendar",
"version": "0.1.0",
"description": "demo",
"license": "MIT",
"devDependencies": {
"grunt": "~0.4.1",
"grunt-contrib-jshint": "~0.6.3",
"grunt-contrib-uglify": "~0.2.1",
"grunt-contrib-requirejs": "~0.4.1",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-clean": "~0.5.0",
"grunt-strip": "~0.2.1"
},
"dependencies": {
"express": "3.x"
}
}
(3)从配置文件中可以得知,我们在其中定义了需要处理的文件"jquery.calendar",以及一堆依赖包。ok,那现在可以创建项目了。
执行命令:grunt install 该命令执行后,你会发现咱们的项目文件夹下多了好多东西,这些东西其实就是咱们的运行程序需要用到的文件了。
小试文件压缩功能
通过上面的步骤,咱们的grunt压缩环境已经创建好了,那现在可以试一下压缩功能了?不急!
(1)咱们的待处理文件放在哪里啊?默认是放在项目根命令下的src文件夹中,所以我们得先在根目录中建立一个"src",把需要处理的jquery.calendar.js放置其中。
(2)grunt怎么知道我是要做压缩功能呢?package.json只是配置了依赖包和待处理文件,并没说明我要做压缩功能啊?对!这个问题咱们得引入另一个文件来解决。
该文件就是Gruntfile.js。该文件是个js不是配置文件,其实可以看做是运行的入口,同样文件放置项目根目录下:
文件样例:
module.exports = function (grunt) {
// 项目配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
uglify: {
options: {
banner: '/*! <%= pkg.file %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
build: {
src: 'src/<%=pkg.file %>.js',
dest: 'dest/<%= pkg.file %>.min.js'
}
}
});
// 加载提供"uglify"任务的插件
grunt.loadNpmTasks('grunt-contrib-uglify');
// 默认任务
grunt.registerTask('default', ['uglify']);
}
ok!一切就绪,执行 grunt 命令!你会发现咱们的min文件在根目录下的dest就创建好了。
再试文件合并功能
上面的工程环境都配置好了,那么文件合并功能,按道理就是修改下配置即可了。合并文件依赖于grunt-contrib-concat插件,所以我们的package依赖项要新增一项"grunt-contrib-concat": "~0.3.0"。
{
"name": "demo",
"file": "jquery.calendar",
"version": "0.1.0",
"description": "demo",
"license": "MIT",
"devDependencies": {
"grunt": "~0.4.1",
"grunt-contrib-jshint": "~0.6.3",
"grunt-contrib-uglify": "~0.2.1",
"grunt-contrib-requirejs": "~0.4.1",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-clean": "~0.5.0",
"grunt-strip": "~0.2.1",
"grunt-contrib-concat": "~0.3.0"
},
"dependencies": {
"express": "3.x"
}
}
咱们的运行入口也得变一下,告诉grunt,这回我要做的是文件合并,合并src下所有js。
module.exports = function (grunt) {
// 项目配置
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
concat: {
options: {
separator: ';'
},
dist: {
src: 'src/*.js',
dest: 'dest/test.js'
}
}
});
grunt.loadNpmTasks('grunt-contrib-concat');
// 默认任务
grunt.registerTask('default', ['concat']);
}
ok!执行命令 grunt
哦,no!!出现错误,提示“grunt-contrib-concat”没安装!,ok咱们就安装。
执行:npm i --save-dev grunt-contrib-imagemin
再次运行 grunt,一切ok!!