grunt和gulp都是前端自动化的工具,grunt更成熟,插件社区全、大;gulp比较年轻,性能更好,更简单容易。具体使用哪种可根据实际项目组来决定。
创建任务
grunt默认执行的是default文件

 module.exports = function(grunt) {
grunt.registerTask('default',function(){
console.log('Hello Grunt');
})
}

在执行他的时候,需要给参数赋值,比如在命令行输入:grunt greet:marymei

 module.exports = function(grunt) {
grunt.registerTask('greet',function(name){
console.log('Hello' +name);
})
}

处理错误,遇到错误warn默认就不继续执行了,但是可以在命令行设置grunt greet:n --force来强制执行
但是如果是fatal,那么即使使用了grunt greet:n --force他也是不向下执行的

 module.exports = function(grunt) {
grunt.registerTask('greet',function(name){
if(name.length < 2) {
grunt.warn('名字太短了~');
}
grunt.log.writeln('Hello' +name);
})
}

链接多个任务:

 module.exports = function(grunt) {
grunt.registerTask('greet-1',function(){
grunt.log.writeln('Hello');
});
grunt.registerTask('greet-2',function(){
grunt.log.writeln('Hola');
});
grunt.registerTask('greet-3',function(){
grunt.log.writeln('您好');
});
grunt.registerTask('greentAll',['greet-1','greet-2','greet-3']);
};

初始化:

 module.exports = function(grunt) {
grunt.initConfig({
greet: {
english: 'Hello'
}
});
grunt.registerTask('greet',funtion(){
grunt.log.writeln(grunt.config.get('greet.english'));
});
};

多任务:

 module.exports = function(grunt) {
grunt.initConfig({
greet: {
english: 'Hello',
spanish:'Hola',
chinese:'您好'
}
});
grunt.registerMultiTask('greet',funtion(){
grunt.log.writeln(this.target + ':' + this.data); });
};

文件与目录
创建目录

 module.exports = function(grunt) {
grunt.registerTask('createFolders',function(){
grunt.file.mkdir('dist/stylesheets');
});
};

tree -I node_modules 命令可以查看文件目录

删除目录:

 module.exports = function(grunt) {
grunt.registerTask('createFolders',function(){
grunt.file.mkdir('dist/stylesheets');
});
grunt.registerTask('clean',function(){
grunt.file.delete('dist');
});
};

显示版本

 module.exports = function(grunt) {
grunt.initConfig({
pkg:grunt.file.readJSON('package.json');
});
grunt.registerTask('copyright',function(){
var content = grunt.tamplate.process('<%= pkg.name%>这个项目是由<%= pkg.author %>创建的,现在的版本<%= pkg.version %>');
grunt.file.write('copyright.txt', content);
});
};

复制文件:
  module.exports = function(grunt){ grunt.loadNpmTasks('grunt-contrib-copy'); }

配置要复制的文件:

 module.exports = function(grunt){
//加载复制文件的插件
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.initConfig({
copy: {
html: {
src: 'index.html',
dest: 'dist/'
},
style: {
src: 'stylesheets/*.css',
dest: 'dist/'
},
js: {
src:'javascript/**/*.js'
dest:'dist/'
}
}
})
};

监听文件变化的插件:
先安装如下命令
插件:npm install grunt-contrib-watch --save-dev

 module.exports = function(grunt){
//加载复制文件的插件
grunt.loadNpmTasks('grunt-contrib-copy');
//加载监听文件变化,文件发生变化执行指定的任务
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.initConfig({
watch: {
html:{
files: ['index.html'],
tasks:['copy.html']
}
},
copy: {
html: {
src: 'index.html',
dest: 'dist/'
},
style: {
src: 'stylesheets/*.css',
dest: 'dist/'
},
js: {
src:'javascript/**/*.js',
dest:'dist/'
}
}
})
};

插件
创建服务器:grunt-contrib-connect
配置服务器
实时刷新:livereload
编译sass:grunt-contrib-sass
编译less:grunt-contrib-less
合并文件:grunt-contrib-concat
选项:options
最小化js:grunt-contrib-uglify
最小化css:grunt-contrib-cssmin
最小化图像:grunt-contrib-imagemin

......

安装插件的命令 sudo npm install xxxx --save-dev

配置服务器:

 module.exports = function(grunt){
//加载复制文件的插件
grunt.loadNpmTasks('grunt-contrib-copy');
//加载监听文件变化,文件发生变化执行指定的任务
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-connect');
grunt.initConfig({
connect:{
server:{
options: {
port:8000,
base:'dist'
}
}
},
watch: {
html:{
files: ['index.html'],
tasks:['copy.html']
}
},
copy: {
html: {
src: 'index.html',
dest: 'dist/'
},
style: {
src: 'stylesheets/*.css',
dest: 'dist/'
},
js: {
src:'javascript/**/*.js',
dest:'dist/'
}
}
})
};

grunt简记的更多相关文章

  1. 初学seaJs模块化开发,利用grunt打包,减少http请求

    原文地址:初学seaJs模块化开发,利用grunt打包,减少http请求 未压缩合并的演示地址:demo2 学习seaJs的模块化开发,适合对seajs基础有所了解的同学看,目录结构 js — —di ...

  2. grunt配置任务

    这个指南解释了如何使用 Gruntfile 来为你的项目配置task.如果你还不知道 Gruntfile 是什么,请先阅读 快速入门 指南并看看这个Gruntfile 实例. Grunt配置 Grun ...

  3. 快速开发Grunt插件----压缩js模板

    前言 Grunt是一款前端构建工具,帮助我们自动化搭建前端工程.它可以实现自动对js.css.html文件的合并.压缩等一些列操作.Grunt有很多插件,每一款插件实现某个功能,你可以通过npm命名去 ...

  4. 是时候搁置Grunt,耍一耍gulp了

    也算是用了半年Grunt,几个月前也写过一篇它的入门文章(点此查看),不得不说它是前端项目的一个得力助手.不过技术工具跟语言一样日新月异,总会有更好用的新的东西把旧的拍死在沙滩上(当然Grunt肯定没 ...

  5. 应用Grunt自动化地优化你的项目前端

    在不久前我曾写了一篇 应用r.js来优化你的前端 的文章,为大家介绍了r.js这个实用工具,它可以很好地压缩.合并前端文件并打包整个项目.但是如果将r.js放到项目中,我们不得不顾及到一个问题——项目 ...

  6. RangePartitioner 实现简记

    摘要: 1.背景 2.rangeBounds 上边界数组源码走读 3.RangePartitioner的sketch 源码走读 4.determineBounds 源码走读 5.关于RangePart ...

  7. Grunt(页面静态引入的文件地址的改变探究)-V2.0

    相关插件的引用: grunt-usemin  对页面的操作 grunt-contrib-cssmin  压缩css load-grunt-tasks 瘦身gruntfile grunt-rev给md5 ...

  8. Grunt基本使用-V1.0

    浅语:grunt中文网:http://www.gruntjs.net/ 第一步:Grunt 依赖 Node.js 所以在安装之前确保你安装了 Node.js.然后开始安装 Grunt. 实际上,安装的 ...

  9. nodejs、npm、grunt——名词解释

    最近着手开发一个新项目,打算从工程化的角度整理一套自己的前端开发.发布体系. grunt这些工具,之前别人用我也用,并没有认真想过它们的前世今生,正好趁着这个机会,我来理一理目前业界比较流行这些工具的 ...

随机推荐

  1. PHP : 封装Mysqli的连接、关闭和增改查(面向过程)

    废话不多说,直接上图和案例:(看行数进行拼接) 注意:连接数据库中,因为用了$CONNECT全局变量,所以我们的连接数据库封装方法必须要执行了才能获取到此全局变量的值 所引入的数据库文件(databa ...

  2. C++指针、引用、const

    ; int *p = &a; //定义指针p指向变量a *p = ; //*p代表a的值 ; p = &b; //p指向变量b *p = ; //此时*p代表b的值 ] = {,,}; ...

  3. 寄生组合式继承 js

    寄生组合式继承是集寄生式继承和组合继承的优点于一身,是基于类型继承最有效的方式 function object(o){ function F(){}; F.prototype = o; return ...

  4. @RequiresPermissionss是否可以填写多种权限标识,只要满足其一就可以访问?

    @RequiresPermissionss是否可以填写多种权限标识,只要满足其一就可以访问?  发布于 180天前  作者 qq_b02c4863  144 次浏览  复制  上一个帖子  下一个帖子 ...

  5. Nginx+Tomcat+memcached高可用会话保持

    Nginx+Tomcat+memcached高可用会话保持 文章来源dyc2005   一.概述 之前文章已经描述了企业高可用负载相关的架构及实现,其中常用的nginx或haproxy,LVS结合ke ...

  6. 会话技术: Cookie Session JSP

    ##  Cookie A..概念:客户端会话技术,将数据保存到客户端 B.使用步骤: 1.创建Cookie对象,绑定数据 new Cookie(String  name, String value) ...

  7. JS判断手机横竖屏

    在移动端开发时,有时候需要判断手机的横竖屏,那么就需要用到window.orientation这个参数,通过这个参数可以判断出手机是处在横屏还是竖屏状态. 屏幕方向对应的window.orientat ...

  8. 第38章 I2S—音频播放与录音输入—零死角玩转STM32-F429系列

    第38章     I2S—音频播放与录音输入 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  9. ios核心动画(基础动画)

    一.简单介绍 CAPropertyAnimation的子类 属性解析: fromValue:keyPath相应属性的初始值 toValue:keyPath相应属性的结束值 随着动画的进行,在长度为du ...

  10. AsyncDisplayKit技术分析

    转载请注明出处:http://xujim.github.io/ios/2014/12/07/AsyncDisplayKit_inside.html ,谢谢 前言 Facebook前段时间发布了其iOS ...