gruntjs开发实例

Grunt是基于Node.js的项目构建工具。它可以自动运行你所设定的任务,如编译less,sass,压缩js,合拼文件等等。

(一)安装nodejs环境,Grunt 0.4.x要求Node.js的版本>=0.8.0,如果你已安装了nodejs,命令行中运行node -v查看你的Node.js版本,如果版本号不够,重新安装覆盖旧版本。

(二)如果你的公司是用代理上网,先命令行 npm set proxy=ip地址 ,然后命令行 npm install -g grunt-cli 将grunt植入到你的系统里面,这样就允许你从任意目录来运行它(定位到任意目录运行grunt命令),安装grunt-cli并不等于安装了grunt任务运行器!Grunt CLI的工作很简单:在Gruntfile所在目录调用运行已经安装好的相应版本的Grunt。这就意味着可以在同一台机器上同时安装多个版本的Grunt

(三)gruntjs的运行是依靠着package.jsonGruntfile.js这两个文件配置,在你的项目根目录新建此 2 个文件,格式如下:

  (1)package.json  在此文件写入你项目所依赖的Grunt版本和Grunt插件,例子:

{
  "name": "pcauto",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.5",
    "grunt-contrib-less": "~0.11.4","grunt-contrib-watch": "~0.6.0"
  }
}

  name :项目的名称,version:项目的版本号(这些都是随意的),devDependencies:设置grunt版本号与各插件 (名城:版本号,可以在官网查看相关的名称与版本号),更多插件查看

  (2)在此项目根目录 shift + 右键 -> 在此处打开命令行,npm install

  

  在根目录自动生成一个 node_modules的文件夹,里面就是你需要的grunt插件,到这步 grunt版本与插件都安装好了,下一步就是配置Gruntfile.js

  (3)配置工作流Gruntfile.js

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON(‘package.json‘),
    less: {
      dev: {
          files:{
            ‘css/index.css‘:‘less/index.less‘,
            ‘css/page.css‘:‘less/page.less‘
          }
      }
    },
    watch:{
      less:{
          files:[‘less/*.less‘],
          tasks:[‘less‘]
      }
    }
  });

  // 加载包含 "uglify" 任务的插件。
  grunt.loadNpmTasks(‘grunt-contrib-less‘);
  grunt.loadNpmTasks(‘grunt-contrib-watch‘);

  // 默认被执行的任务列表。
  grunt.registerTask(‘default‘, [‘less‘,‘watch‘]);

};

  【1】pkg: grunt.file.readJSON(‘package.json‘)  就是把在刚配置好的json数据导入到Grunt配置中

  【2】插件调用配置

less: {
      dev: {
          files:{
            ‘css/index.css‘:‘less/index.less‘,
            ‘css/page.css‘:‘less/page.less‘
          }
      }
}

     调用配置,如图less 中,指定了名为dev(自定义,必需)的任务,然后执行多文件处理,格式为 files:{‘xxxx输出的css文件路径与文件名‘:‘xxx你所编写的less文件‘,‘xxxx‘:‘xxxxx‘} ,更详细的配置

     为了避免每次编译都要运行一个命令行,这里有个很好的插件 watch,它能实时监控(如例子中在watch任务中监控less文件夹下的所有less文件,一旦代码有发生改变,就自动执行less编译任务,就不需要每次运行 grunt命令行。注:开始只需要运行一次 grunt命令行,然后窗口不要关闭,保持打开的状态,如下图。)

  【3】加载任务插件   grunt.loadNpmTasks(‘grunt-contrib-less‘);  grunt.loadNpmTasks(‘grunt-contrib-watch‘);

  【4】定义被执行的任务列表   grunt.registerTask(‘default‘, [‘less‘,‘watch‘]);   (默认任务,如果你的名称是 grunt.registerTask(‘yong‘, [‘less‘,‘watch‘]),那么在下一步中运行命令行就是grunt yong)

  到这里,已经全部都配置好,下一步就是运行

(四)在此项目根目录 shift + 右键 -> 在此处打开命令行,grunt

  

  在之前的时代,编译less,压缩文件,与合拼文件,都需要借助不同的工具逐个逐个任务执行完成,效率很低,如今有了 Grunt,一切都自动化。

贴上一个完整项目的配置例子,仅供参考:

package.json

{
  "name": "pcauto",
  "version": "0.1.0",
  "devDependencies": {
    "grunt": "~0.4.5",
    "grunt-contrib-less": "~0.11.4",
    "grunt-contrib-uglify": "~0.7.0",
    "grunt-contrib-concat": "~0.5.0",
    "grunt-contrib-cssmin": "~0.7.0",
    "grunt-contrib-watch": "~0.6.0"
  }
}

Gruntfile.js

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    pkg: grunt.file.readJSON(‘package.json‘),
    //less编译为css
    less: {
      options: {
        banner: ‘/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd hh:mm") %> */\n‘
      },
      dev: {
          files:{
            ‘css/index.css‘:‘less/index.less‘,
            ‘css/page.css‘:‘less/page.less‘
          }
      }
    },
    //文件合拼
    concat:{
      options: {
        banner: ‘/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd hh:mm") %> */\n‘
      },
      dev:{
        files:{
          ‘js/index.js‘:[‘js/block/hide.js‘,‘js/block/show.js‘,‘js/index.js‘]
        }
      }
    },
    //css文件压缩
    cssmin:{
      dev:{
        files:{
          ‘css/index.min.css‘:‘css/index.css‘,
          ‘css/page.min.css‘:‘css/page.css‘
        }
      }
    },
    //压缩js文件
    uglify:{
      options: {
        banner: ‘/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd hh:mm") %> */\n‘
      },
      dev:{
        files:{
          ‘js/index.min.js‘:‘js/index.js‘
        }
      }
    },
    //实时监控任务
    watch:{
      less:{
          files:[‘less/*.less‘],
          tasks:[‘less‘]
      },
      concat:{
          files:[‘js/*.js‘],
          tasks:[‘uglify‘]
      },
      uglify:{
          files:[‘js/*.js‘],
          tasks:[‘uglify‘]
      },
      cssmin:{
          files:[‘css/*.css‘],
          tasks:[‘cssmin‘]
      }
    }
  });

  // 加载包含 "uglify" 任务的插件。
  grunt.loadNpmTasks(‘grunt-contrib-less‘);
  grunt.loadNpmTasks(‘grunt-contrib-watch‘);
  grunt.loadNpmTasks(‘grunt-contrib-uglify‘);
  grunt.loadNpmTasks(‘grunt-contrib-concat‘);
  grunt.loadNpmTasks(‘grunt-contrib-cssmin‘);

  // 默认被执行的任务列表。
  grunt.registerTask(‘default‘, [‘less‘,‘concat‘,‘cssmin‘,‘uglify‘,‘watch‘]);

};
时间: 2024-10-30 23:29:18

gruntjs开发实例的相关文章

Cocos2d-x 3.X手游开发实例详解

Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰然网创始人杨雍力荐) 于浩洋 著   ISBN 978-7-121-23998-4 2014年9月出版 定价:59.00元 356页 16开 编辑推荐 以Cocos2d-x V3.0为框架全面讲解手游开发的知识和方法 以热门游戏2048.卡牌为例,完整再现手游的开发过程 Cocos2d-x作者之一林

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(下)

在飞机大战游戏开发中遇到的问题和解决方法: 1.在添加菜单时,我要添加一个有背景的菜单,需要在菜单pMenu中添加一个图片精灵,结果编译过了但是运行出错,如下图: 查了很多资料,调试了很长时间,整个人都要崩溃了. 最后发现引擎中CCMenu::itemForTouch函数中有遍历子节点的行为,但是循环中没有判断子节点类型是否为CCMenuItem.如图:码,这样一来,加入到pMenu中的图片精灵被当作菜单项取了出来使用,导致报错.老版本的果然又不完善的地方,整个人都不好了...果断修改引擎里的源

Android手机拨打电话的开发实例

一部手机最常用的功能就是打电话和发短信了,在Android开发中我们如何通过程序拨打电话呢?本文就给出一个用Android手机拨打电话的简单的实例. 下面是开发此实例的具体步骤: 一.新建一个Android工程,命名为phoneCallDemo. 二.设计程序的界面,打开main.xml把内容修改如下: XML/HTML代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

《HTML 5网页开发实例详解》目录

第一篇  从宏观上认识HTML 5 讲述了HTML 5引发的Web革命.HTML 5的整体特性.HTML 5相关概念和框架和开发环境搭建. 第1章 HTML 5引发的Web革命 1.1  你是不是真的了解HTML 5 1.1.1  通过W3C认识HTML 5的发展史 1.1.2  HTML 5.HTML4.XHTML的区别 1.1.3  什么人应该学HTML 5 1.1.4  一个图告诉你如何学习HTML 5 1.2  浏览器之争 1.2.1  说说这些常见的浏览器 1.2.2  浏览器的兼容烦

JDBC - 开发实例 - MVC模式

JDBC - 开发实例 - MVC模式  1. 在web.xml中配置连接数据库的信息 web.xml: <context-param> <param-name>server</param-name> //主机名 <param-value>localhost</param-value> </context-param> <context-param> <param-name>db</param-name&

ZabbixAPI+django+nginx简单的二次开发实例(三)

接上一篇博文 ZabbixAPI+django+nginx简单的二次开发实例(二) 步骤三,站点架构部分 本部分用到的软件 1,Nginx:接受访问请求,应答静态页面,转发动态请求至uwsgi 2,uwsgi:应答动态请求 3,Django:处理后台数据 4,supervisor:管理进程 首先安装Nginx yum install epel-release yum install python-devel nginx 修改配置文件 vim /etc/ngnix/ngnix.conf user

基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(中)

接<基于Cocos2d-x-1.0.1的飞机大战游戏开发实例(上)> 三.代码分析 1.界面初始化 1 bool PlaneWarGame::init() 2 { 3 bool bRet = false; 4 do 5 { 6 CC_BREAK_IF(! CCLayer::init()); 7 8 _size = CCDirector::sharedDirector()->getWinSize(); 9 10 // 设置触摸可用 11 this->setIsTouchEnabled

ZabbixAPI+django+nginx简单的二次开发实例(五)

接上一篇博文 ZabbixAPI+django+nginx简单的二次开发实例(四) 步骤五,图形展示 写一个RRDtool图形展示的脚本,由于要和view.py联动,我放在了appname的文件夹下 cd /API/web/pos/moniter vim rrddraw.py #!/usr/bin/env python #coding=utf-8 import rrdtool #ping的图形 def itemping(data): pngname = str(data['pname']) #图

android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)

如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http://www.tompda.com/c/article/11778/ 而实际上使用android平台对widget开发的支持,桌面便签类软件是很易于开发的. 本文通过逐步实现一个简单的桌面便签软件,和大家分享进行widget开发的过程和方法. 1.MyNote的终于实现效果 为了提起大家阅读本文的兴趣,先