1. 新建文件和文件目录

mkdir grunt-in-action
cd grunt-in-action
cd grunt-in-action
mkdir grunt-empty
cd grunt-empty vim index.html
mkdir js
cd js
vim index.js
cd ..

2. npm和grunt初始化

npm init
npm install grunt --save-dev
npm install //如果想要node_module,就 加载

3. 安装task

npm install load-grunt-tasks --save-dev

npm install time-grunt --save-dev

npm install grunt-contrib-copy --save-dev

npm install grunt-contrib-clean --save-dev

4. 写入好配置

'use strict';

module.exports = function (grunt) {
//引入执行task的grunt插件或者叫做module
require('load-grunt-tasks')(grunt);
//引入执行事件显示grunt的模块
require('time-grunt')(grunt); var config = {
app: 'app', //app 代表app目录
dist: 'dist' //dist 代表dest目录
} grunt.initConfig({
config: config, //copy任务
copy: {
/*
//字符串形式的
dist_html: {
//src 表示源文件
src: '<%= config.app %>/index.html',
//dest 表示布标文件
dest: '<%= config.dist %>/index.html'
},
dist_js: {
src: '<%= config.app %>/js/index.js',
dest: '<%= config.dist %>/js/index.js'
}
*/
/*
//数组形式
dist: {
files: [
{
src: '<%= config.app %>/index.html',
dest: '<%= config.dist %>/index.html'
},
{
src: '<%= config.app %>/js/index.js',
dest: '<%= config.dist %>/js/index.js'
}
]
}*/
//对象简直对
dist: {
/*files: {
'<%= config.dist %>/index.html':'<%= config.app %>/index.html',
'<%= config.dist %>/js/index.js': ['<%= config.app %>/js/index.js']
}*/
files: [
{
expand: true,
cwd: '<%= config.app %>/', //表示源码目录
// src: '*.html',
src: '**/*.js',
dest: '<%= config.dist %>/', //表示目标路
ext: '.js', //后缀名匹配
// extDot: 'first' //表示文件名第一个点之后内容与src匹配
extDot: 'last',//表示文件名最后一个点之后的内容与src匹配
flatten: true, //表示平铺,意思在dist目录下就生成了,而不再生成目标子级目录
rename: function(dest,src){ //重命名
/*
* rename 要在ext extdot flatten开启才有效
* dest 表示目标目录
* src 表示文件名
* */
return dest + 'js/' + src;
},
}
]
}
},
//清楚任务,注意看英语单词就能理解其意思
clean: {
dist: {
/*
src: '<%= config.dist %>',
*/
//这里面的*类似正则
src: ['<%= config.dist %>/**/*'],
// src: '<%= config.dist %>/'
//额外参数
/*
* filter: fn(param1);
*param1 表示文件目录
* */
// filter: function (filepath) {
// return (!grunt.file.isDir(filepath));
// }
/*
* nonull
* dot
* matchBase
* expand
* */
}
}
});
};

5.运行grunt

grunt copy //运行copy task

grunt  clean //运行clean task

6.最终的目录结构

grunt学习二的更多相关文章

  1. Grunt 学习笔记【2】---- 配置和创建任务

    本文主要讲Grunt任务配置. 说明:本文所有示例都基于Grunt 0.4.5版本. 一 说明 使用Grunt实现项目的打包等工程化工作,实际上是通过Grunt提供的机制和插件,配置一个个任务(例如: ...

  2. Grunt学习使用

    原文地址:Grunt学习使用必看 grunt简介神马的不多说,到处一大堆. 我只说说我已经实现了的代码. 按照官方的教程 相信已经配置好了,接下来说 package.json 和 Gruntfile. ...

  3. emberjs学习二(ember-data和localstorage_adapter)

    emberjs学习二(ember-data和localstorage_adapter) 准备工作 首先我们加入ember-data和ember-localstorage-adapter两个依赖项,使用 ...

  4. ReactJS入门学习二

    ReactJS入门学习二 阅读目录 React的背景和基本原理 理解React.render() 什么是JSX? 为什么要使用JSX? JSX的语法 如何在JSX中如何使用事件 如何在JSX中如何使用 ...

  5. TweenMax动画库学习(二)

    目录            TweenMax动画库学习(一)            TweenMax动画库学习(二)            TweenMax动画库学习(三)            Tw ...

  6. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

  7. Struts2框架学习(二) Action

    Struts2框架学习(二) Action Struts2框架中的Action类是一个单独的javabean对象.不像Struts1中还要去继承HttpServlet,耦合度减小了. 1,流程 拦截器 ...

  8. Python学习二:词典基础详解

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/7862377.html 邮箱:moyi@moyib ...

  9. Quartz学习--二 Hello Quartz! 和源码分析

    Quartz学习--二  Hello Quartz! 和源码分析 三.  Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...

随机推荐

  1. vue再次入手(数据传递②)

    接上篇~ 5.最后一种,互通:无所谓父组件或者是子组件,而是随时随地都能调用到数据的一种方法.便是利用vuex来管理数据,官网描述: Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它 ...

  2. C/C++获取文件后缀名并且比较

    以下这段是VC中过去文件后缀名的方法 1.CString GetSuffix(CString strFileName) {         return strFileName.Right(strFi ...

  3. Android学习之RadioGroup和RadioButton

    转载自:http://my.oschina.net/amigos/blog/59261 实现RadioButton由两部分组成,也就是RadioButton和RadioGroup配合使用.RadioG ...

  4. HTML-锚点-JS跳转锚点

    window.location.hash使用说明,这篇写的挺详细的 http://www.cnblogs.com/nifengs/p/5104763.html a标签的话是 name,div呢是id, ...

  5. select选择option时触发的click事件google不兼容问题

    原先的方式,下面代码编写的问题在google浏览器下是触发不了click事件的,具体缘由不清楚,反正都可以概括为不兼容了 碰到问题时,百度到的一篇解决:http://blog.163.com/rihu ...

  6. 【C#新特性】不用out ref同时返回多个值-元组Tuple

    元组Tuple,它是一种固定成员的泛型集合 下面先看看官方的一个使用例子: 创建一个包含7个元素的Tuple数组 // Create a 7-tuple. , , , , , );// Display ...

  7. PHP魔术变量和魔术方法

    基础知识:魔术变量和魔术方法 魔术变量:最初PHP魔术变量的出现主要是为了方便开发者调试PHP的代码;当然也可以利用这个实现特殊需求.在写法上魔术变量前后都有两个下划线. 如:_LINE_:返回文件中 ...

  8. 【linux系列】cenos7安装jdk

    一.下载jdk,我采用的jdk.tar.gz的安装包 二.创建jdk安装目录 三.安装包解压 四.jdk环境变量配置 五.使配置的环境变量生效 六.检查jdk是否安装成功

  9. sencha touch 压缩js,css遇到的问题

    在使用工具压缩css和jss时,我遇到了以下问题 1. showBtn: { tap: function (t, value) { this.redirectTo(t.config.goto); } ...

  10. vue组件定义方式

    一.全局组件 <div id="box"> {{msg}} <my-aaa></my-aaa> </div> var Home = ...