package.js

{
  "name": "ttd_v3",
  "version": "0.1.0",
  "author": "liujin",
  "devDependencies": {
    "connect-livereload": "^0.5.2",
    "grunt": "~0.4.2",
    "grunt-contrib-concat": "~0.3.0",
    "grunt-contrib-connect": "^0.7.1",
    "grunt-contrib-cssmin": "^0.11.0",
    "grunt-contrib-jshint": "~0.6.0",
    "grunt-contrib-sass": "~0.3.0",
    "grunt-contrib-uglify": "~0.3.2",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-css": "~0.5.4",
    "grunt-sass": "0.6.1"
  }
}

gruntfile.js

module.exports = function(grunt) {

    // LiveReload的默认端口号,你也可以改成你想要的端口号
    var lrPort =35729  ;
    // 使用connect-livereload模块,生成一个与LiveReload脚本
    // <script src="http://127.0.0.1:35729/livereload.js?snipver=1" type="text/javascript"></script>
    var lrSnippet = require('connect-livereload')({ port: lrPort });
    // 使用 middleware(中间件),就必须关闭 LiveReload 的浏览器插件
    var lrMiddleware = function(connect, options) {
        return [
            // 把脚本,注入到静态文件中
            lrSnippet,
            // 静态文件服务器的路径
            connect.static(options.base),
            // 启用目录浏览(相当于IIS中的目录浏览)
            connect.directory(options.base)
        ];
    };

    // 项目配置(任务配置)
    grunt.initConfig({
        // 读取我们的项目配置并存储到pkg属性中
        pkg: grunt.file.readJSON('package.json'),
        // 通过connect任务,创建一个静态服务器
        connect: {
            options: {
                // 服务器端口号
                port: 8000,
                // 服务器地址(可以使用主机名localhost,也能使用IP)
                hostname: 'localhost',
                // 物理路径(默认为. 即根目录) 注:使用'.'或'..'为路径的时,可能会返回403 Forbidden. 此时将该值改为相对路径 如:/grunt/reloard。
                base: '.'
            },
            livereload: {
                options: {
                    // 通过LiveReload脚本,让页面重新加载。
                    middleware: lrMiddleware
                }
            }
        },
        // 通过watch任务,来监听文件是否有更改
        watch: {
            client: {
                // 我们不需要配置额外的任务,watch任务已经内建LiveReload浏览器刷新的代码片段。
                options: {
                    livereload: lrPort
                },
                // '**' 表示包含所有的子目录
                // '*' 表示包含所有的文件
                files: ['D:/working/TFS2010/UISolution/website/_prototype_/code_pub/cn/vacation_v2/ttd/v3/*.php','D:/working/TFS2010/UISolution/website/_webresource_/styles/vacation_v2/*.css','D:/working/TFS2010/UISolution/website/_pic_/ttdonline/*']
            },
            sass: {
                files: ['sass/*.{scss,sass}','sass/*.{scss,sass}'],
                tasks: ['sass:dist']
            }
        },
        //js合并任务
        concat : {
            webqq : {
                files : {
                     'dist/js/test.js' : ['js/a.js','js/b.js']
                }
            }
         },
         //js压缩任务
         uglify : {
            options: {
                banner: '/** \n * <%= pkg.name %> \n * author:<%= pkg.author %> \n * update:<%= new Date() %> \n**/\n'
            },
            webqq : {
                files : {
                     'dist/js/test.min.js' : ['dist/js/test.js']
                }
            }
        },
        //css压缩任务
        cssmin: {
            options: {
                    banner: '/** \n * <%= pkg.name %> \n * author:<%= pkg.author %> \n * update:<%= new Date() %> \n**/'
            },
            cssmini: {
                files: {
                  'D:/git_ttd/ResStatic/code/ResACTOnline/css/vacation_v2/book_v3.1_ttd.css': ['D:/working/TFS2010/UISolution/website/_webresource_/styles/vacation_v2/book_v3.1_ttd.css']
                }
            }
        },
        //sass编译
        sass: {
          dist: {
            files: {
              'dist/css/test.css': 'sass/test.scss'
            }
          }
        }

    }); // grunt.initConfig配置完毕

    // 监控html js css
    grunt.loadNpmTasks('grunt-contrib-connect');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.registerTask('live', ['connect', 'watch']);

    //合并压缩js
    grunt.loadNpmTasks('grunt-contrib-concat');  //js合并
    grunt.loadNpmTasks('grunt-contrib-uglify');  //js压缩
    grunt.registerTask('jsmini', ['cssmin']);

    //压缩css
    grunt.loadNpmTasks('grunt-css');
    grunt.registerTask('cssmini', ['cssmin']);

    //编译sass
    grunt.registerTask('sassmini', ['sass:dist', 'watch']);
    grunt.loadNpmTasks('grunt-sass');
    grunt.loadNpmTasks('grunt-contrib-watch');
};

初探grunt.js的更多相关文章

  1. 初探原生js根据json数据动态创建table

    初探原生js根据json数据动态创建table 小生以实习生的职位进入了一家非纯软件的公司做asp.net开发,大半个月下来发现公司里居然没有前端工程师,这令我很诧异,跟着公司做项目,发现前端后台没有 ...

  2. 分享Grunt.js配置: watch + liveReload 实时监测文件变化自动刷新浏览器

    http://www.tuicool.com/articles/2eaQJn 用Grunt配置watch和liveReload组件,可以实时检测指定的文件变化并自动刷新浏览器.目前基本已经成为了我的必 ...

  3. Grunt JS构建环境搭建以及使用入门

    Grunt JS构建环境搭建以及使用入门 1.应用场景 一种自动化任务处理工具,对于日常的需求(代码规则检查.代码合并)可以实现自动化执行,只需要保留package.json和Gruntfile.js ...

  4. Grunt.js 上手

    Official Site gruntjs.org/docs/getting-started.html 或者看http://tgideas.qq.com/webplat/info/news_versi ...

  5. 使用grunt js进行js的链接和压缩

    1,http://nodejs.org/download/ 安装nodejs 2,配置环境变量,将nodejs的安装目录放置在Path环境变量中 3,在cmd中 npm install -g grun ...

  6. 初探 Ext JS 6 (sencha touch/ext升级版)

    Sencha Touch 现在已全面升级至Ext Js 6,那么我们如何使用他们呢? 首先去官网下载最新的sdk和帮助文档 sdk下载地址:https://www.sencha.com/product ...

  7. 初探flow.js

    第一部分:前言 我们知道JS是弱类型语言,在声明变量时不论是什么类型的变量我们都用var即可,所以js是非常灵活的,但是同时问题就是弱类型语言有可能会出错,比如在调用函数时,且往往在运行起来时才可以检 ...

  8. 前端初学者——初探Modernizr.js Modernizr.js笔记

    什么是Modernizr? Modernizr 是一个用来检测浏览器功能支持情况的 JavaScript 库. 目前,通过检验浏览器对一系列测试的处理情况,Modernizr 可以检测18项 CSS3 ...

  9. 初探node.js

    一.定义及优势 定义:Node.js是一个基于 Chrome V8 引擎 的 JavaScript 运行时,它以事件驱动为基础实现了非阻塞模型. 优势:由于Web场景下的大多数任务(静态资源读取.数据 ...

随机推荐

  1. Linux学习笔记20——第一个多线程程序

    一 什么是线程 线程:是一个进程内部的一个控制序列. 二 使用POSIX的注意点 1 为了使用线程函数库,必须定义宏_REENTRANT,通过定义_REENTRANT来告诉编译器我们需要可重入功能,可 ...

  2. iOS 多线程学习笔记 —— GCD

    本文复制.参考自文章:iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用 ,主要为了加强个人对知识的理解和记忆,不做他用.原作者声明: 著作权声明:本文由http:// ...

  3. leetcode shttps://oj.leetcode.com/problems/surrounded-regions/

    1.从外围搜索O,深度搜索出现了 Line 35: java.lang.StackOverflowError Last executed input: ["OOOOOOOOOOOOOOOOO ...

  4. 关于响应事件中的Sender

    很多响应事件都会有个参数就是Sender,如下: - (IBAction)updateSliderValue:(id)sender Sender其实就是触发响应的那个实例对象,比如这个消息是由一个UI ...

  5. 2013=7=29 nyist 13题

    Fibonacci数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地 ...

  6. UVAlive7141 BombX 14年上海区域赛D题 线段树+离散化

    题意:一个无限大的棋盘, 有n个小兵, 给出了n个兵的坐标, 现在有一个长为width 高为height的炸弹放在棋盘上, 炸弹只能上下左右平移, 不能旋转. 且放炸弹的区域不能含有士兵, 炸弹可以一 ...

  7. delphi TSaveDialog

    TSaveDialog 预览          实现过程 动态创建和使用保存文件对话框 procedure TForm1.Button1Click(Sender: TObject);begin  wi ...

  8. 基于Tomcat7、Java、WebSocket的服务器推送聊天室

    http://blog.csdn.net/leecho571/article/details/9707497 http://blog.fens.me/java-websocket-intro/ jav ...

  9. muduo网络库使用心得

    上个月看了朋友推荐的mudo网络库,下完代码得知是国内同行的开源作品,甚是敬佩.下了mudo使用手冊和035版的代码看了下结构,感觉是一个比較成熟并且方便使用的网络库.本人手头也有自己的网络库,尽管不 ...

  10. cocoaPods下载使用记录

    cocoaPods下载使用记录 参考地址: 如何在Mac OS 上安装运行Ruby运行环境 http://www.cnblogs.com/daguo/p/4097263.html cocoaPods安 ...