scales小谈grunt

Grunt是基于Node.js的项目构建工具。它可以自动运行你所设定的任务。Grunt拥有数量庞大的插件,几乎任何你所要做的事情都可以用Grunt实现。

一头野猪映入眼帘,意:咕噜声

中文网站:http://www.gruntjs.net/

英文网站:http://gruntjs.com/

为何要用构建工具?

一句话:自动化。对于需要反复重复的任务,例如压缩(minification)、编译、单元测试、linting等,自动化工具可以减轻你的劳动,简化你的工作。当你在 Gruntfile 文件正确配置好了任务,任务运行器就会自动帮你或你的小组完成大部分无聊的工作。

为什么要使用Grunt?

Grunt生态系统非常庞大,并且一直在增长。由于拥有数量庞大的插件可供选择,因此,你可以利用Grunt自动完成任何事,并且花费最少的代价。如果找不到你所需要的插件,那就自己动手创造一个Grunt插件,然后将其发布到npm上吧。

安装grunt:

首先安装node,http://nodejs.cn/

通过node安装grunt,命令:(windows在cmd中,LinuxMac在命令行中)

安装grunt命令行grunt-cli(npm install -g grunt-cli),该步全局安装。

添加package.json文件(npm init)

安装grunt(npm install grunt --save-dev)(要通过命令行切换到项目目录后在执行上诉两步操作,--save-dev是将包依赖到项目开发环境中,--save是将包依赖到项目生产环境中)

安装好后会发现在项目目录多了 package.json文件,以及node_modules 文件夹,如下:

package.json文件:声明模块用的,键值对的形式,包名和版本号会存放其中

node_modules:存放包的文件夹(如grunt、gulp、bower、yeoman等)

实战:

安装 load-grunt-tasks (npm install load-grunt-tasks  --save-dev)

安装 time-grunt (npm install time-grunt  --save-dev)

安装 time-grunt (npm install grunt-contrib-copy  --save-dev)

安装 time-grunt (npm install grunt-contrib-clean --save-dev)

创建gruntfile.js,该文件用于自动化构建功能的设置:

下面我们来实现将文件拷入目标目录,和从目标目录中清除

在项目目录下建立源文件目录app, 目录里存放js文件夹和index.html, js文件夹内存放index.js 文件, 结构如下

设置 gruntfile.js 文件:

 1 'use strict'; //使用ES5严格方式
 2   
 3  module.exports = function(grunt){
 4      require('load-grunt-tasks')(grunt);
 5      require('time-grunt')(grunt);
 6 
 7       var config = {
 8           app: 'app',
 9           dist: 'dist'
10      }
11  
12      grunt.initConfig({
13         config: config,
14          copy: {                                       //拷贝
15              dist: {
16                  src:'<%= config.app %>/index.html',   //源文件
17                  dest: '<%= config.dist %>/index.html' //目标文件
18              }
19          },
20          clean: {                                      //清除
21              dist: {
22                  src: '<%= config.dist %>/index.html'  //目标文件
23              }
24          }
25          })
26  }

这样就实现了将源文件拷到目标目录,亦可清除

 1 copy: {
 2             dist_html: {
 3                  src:'<%= config.app %>/index.html',
 4                  dest: '<%= config.dist %>/index.html'
 5              },
 6              dist_js: {
 7                  src:'<%= config.app %>/js/index.js',
 8                  dest: '<%= config.dist %>/js/index.js'
 9              }
10          },
11          clean: {
12              dist: {
13                  src: ['<%= config.dist %>/index.html', '<%= config.dist %>/js/index.js']
14              }
15          }

将js文件一起拷贝,清除操作,注意src的值可以写成数组的形式

 1 copy: {
 2              dist: {
 3                  files:[
 4                      {
 5                          src:'<%= config.app %>/index.html',
 6                          dest: '<%= config.dist %>/index.html'
 7                      },
 8                      {
 9                          src:'<%= config.app %>/js/index.js',
10                          dest: '<%= config.dist %>/js/index.js'
11                      }
12                  ]
13              }
14      },

拷贝部分可以这样写,以数组的形式,里面放入obj键值对

还可以这样写,更加简便,如下:

1 copy: {
2             dist: {
3                  files:{
4                      '<%= config.dist %>/index.html': '<%= config.app %>/index.html',
5                  
6                      '<%= config.dist %>/js/index.js': ['<%= config.app %>/js/index.js']
7                      }
8              }
9     },

直接写成obj键值对,源文件作为值,当然可以将其写成数组的形式,以便处理多个源文件

清除操作可以批量处理,如下,通过通配符,进行批量操作:

还可以添加参数,设置只清除文件(isFile)只清除目录(isDirectory),这些值到node官网即可找到(找stats关键词)

1 clean: {
2            dist: {
3                  src: '<%= config.dist %>/**/*'
4             }
5          }
1 clean: {
2            dist: {
3                src: '<%= config.dist %>/**/*',
4                filter: 'isFile'
5           }
6         }

 还可以自定义方法:意思是不删除目录(!代表否)

1 clean: {
2             dist: {
3               src: '<%= config.dist %>/**/*',
4               filter: function(filepath){
5                    return (!grunt.file.isDir(filepath))
6                }
7            }
8        }

动态拷贝文件:

copy: {
             dist: {
               files:[
                  {
                       expand: true,               //动态拷贝文件
                       cwd: '<%= config.app %>/',   //源文件目录
                       src: '*.html',               //源文件
                       dest: '<%= config.dist %>/', //目标文件目录
                       ext: '.min.html'             //添加后缀
extDot: 'first', //找第一个点加后缀
flatten: true,  //去掉中间各层目录,直接拷贝
rename: function(dest, src){ //将中间目录加回来
                  return dest + 'js/' +src;
                 }
} ] } },

以上便是grunt实现的源文件拷贝到目标目录,以及从目标目录清除的操作。(还包括添加后缀,去掉中间目录的一些小操作)

异乡小龟
原文地址:https://www.cnblogs.com/scale/p/6187014.html