一、简介

构建工具的作用:

在项目部署上线前,通常要将源文件压缩,合并,并拷贝到bch或trunk中。

在将js模块化后,又多了一个分析,提取业务代码中所依赖模块的工作。

解决这一系列繁重工作的自动化工具,称之为构建工具。

任务流程:

task:clean

task:uglify

task:qunit

task:concat

二、安装与构建

1、安装nodejs和npm。(window下集成npm,linux下就需要考虑手动在/usr/sbin/下配置相应的引用路径。

2、安装grunt CLI与grunt

npm install -g grunt-cli 出现错误时 采用npm install grunt-cli --save-dev

参考地址:http://stackoverflow.com/questions/20555605/how-can-i-install-the-grunt-cli-without-getting-errors

npm install grunt --save-dev

linux下安装完grunt之后,会出现-bash: grunt: command not found

vim ~/.bash_profile

加入这句话:export PATH=/home/brianzheng/node_modules/grunt-cli/bin:$PATH

source ~/.bash_profile

grunt --version 进行测试

3、在项目中使用grunt

3-1) 在项目中添加两个文件:package.json和Gruntfile.js

3-1-1) package.json格式示例:

{

"name": "tes",

"version": "1.0",

"description": "merge css and js",

"author": "brianzheng",

"devDependencies": {

"grunt": "~0.4.5",

"grunt-contrib-jshint": "~0.3.0",

"grunt-contrib-concat": "~0.1.1",

"grunt-contrib-uglify": "~0.1.2",

"grunt-contrib-cssmin": "~0.5.0",

"grunt-htmlhint": "~0.9.2"

}

}

package.json放在根目录下,它包含了该项目的一些元信息,如项目名称、描述、版本号,插件等。它应该和源码一样被提交到svn或git。

3-1-2) 在项目中安装常用的插件

grunt-contrib-jshint(js语法检查)、grunt-contrib-concat(js合并)、grunt-contrib-uglify(采用UglifyJS压缩js)、grunt-contrib-cssmin(Css压缩合并)、grunt-htmlhint(html语法验查)、grunt-contrib-clean(清除文件)

在项目中执行:npm install grunt-contrib-jshint,

安装剩余插件类似 npm install 插件名,

安装完成后:在node_modules目录下,会包含相应的插件目录。

Gruntfile.js:

3-2)Gruntfile.js :

3-2-1)、wrapper函数,结构如下,这是Node.js的典型写法,使用exports公开API

module.exports = function(grunt) {

// Do grunt-related things in here

};

3-2-2)、项目和任务配置

3-2-3)载入grunt插件和任务

3-2-4)定制执行任务

示例文件如下:

module.exports = function(grunt) {

// 1.配置参数

grunt.initConfig({

pkg: grunt.file.readJSON("package.json"),

// js删除文件

clean: {

js: [ "build/js-min/*.js" ],

css: [ "build/css-min/*.css" ]

},

// js文件合并

concat: {

options: {

separator: ";",

stripBanners: true,

banner: '/*! - v - ' +

' */'

},

base: {

src: [

"doc/js/jquery-1.11.1.min.js",

"doc/js/common.js",

"doc/js/header.js"

],

dest: "build/js/js-base.js"

},

extras: {

src: [

"doc/js/render-grid.js",

"doc/js/popwin.js",

"doc/js/slider.js"

],

dest: "build/js/js-plugin.js"

}

},

// js压缩文件

uglify: {

options: {

},

base: {

files: {

"build/js-min/js-base.js":

"build/js/js-base.js"

}

},

extras: {

files: {

"build/js-min/js-plugin.js

": "build/js/js-plugin.js"

}

}

},

// css合并压缩

cssmin: {

options: {

keepSpecialComments: 0

},

compress: {

files: {

"build/css-min/css-base.cs

s": [

"doc/css/reset.css",

"doc/css/common.css"

]

}

}

}

});

// 2.载入插件

// js合并插件

grunt.loadNpmTasks("grunt-contrib-concat");

// js压缩插件

grunt.loadNpmTasks("grunt-contrib-uglify");

// css压缩插件

grunt.loadNpmTasks("grunt-contrib-cssmin");

// 清除文件

grunt.loadNpmTasks("grunt-contrib-clean");

// 3.注册任务

grunt.registerTask("default", ["clean", "concat", "uglify", "cssmin"]);

}

执行单个任务:grunt concat

出现错误:

>> Local Npm module "grunt-contrib-concat" not found. Is it installed?

>> Local Npm module "grunt-contrib-uglify" not found. Is it installed?

>> Local Npm module "grunt-contrib-cssmin" not found. Is it installed?

Warning: Task "concat" not found. Use --force to continue.

检查该项目模块里面是否包含node_modules,并且是否已经安装有该系列插件

成功状态提示:

Running "concat:dist" (concat) task

File build/js/js-base.js created.

Done, without errors.

pkg:grunt.file.read.JSON('package.json'):读取package.json已经定义的值

concat是一个合并任务(task),该插件主要负责提取模块中的依赖,并为每个模块设置模块ID。

src:被执行的文件

dest:生成的文件放置的位置

多任务文件合并示例:

concat: {

options: {

separator: ";",

stripBanners: true,

banner: '/*! - v - ' +

' */'

},

base: {

src: [

"doc/js/jquery-1.11.1.min.js",

"doc/js/common.js",

"doc/js/header.js"

],

dest: "build/js/js-base.js"

},

extras: {

src: [

"doc/js/render-grid.js",

"doc/js/popwin.js",

"doc/js/slider.js"

],

dest: "build/js/js-plugin.js"

},

dist: {

src: [

"doc/js/popwin.js",

"doc/js/slider.js"

],

dest: "build/js/js-test.js"

},

dist2: {

src: [

"doc/js/popwin.js",

"doc/js/slider.js"

],

dest: "build/js/js-test.js"

}

}

uglify是一个压缩任务(task)

option:设置参数

build:构建产出文件

加载两个grunt插件

grunt.loadNpmTasks('grunt-contrib-transport');

grunt.loadNpmTasks('grunt-contrib-concat');

注册任务

grunt.registerTask("build", ['concat', 'uglify']);

cmd切换对应项目:

执行: grunt build

将grunt执行体加入到make中

grunt:

grunt build

make grunt

grunt html模块化管理插件,grunt模块化配置相关推荐

  1. laravel 模块化管理 插件 caffeinated

    laravel 模块化管理 插件 caffeinated(以下简称 "咖啡因") 中大型项目 无论是前期 开发还是后期维护 为了节约人力和成本 肯定要进行 模块化开发 今天给大家带 ...

  2. ES6的模块化管理、立即执行函数(IIFE):在函数声明后面立即调用、函数劫持

    1.Node.js简介: (1)Node是什么: A.浏览器内核有两个引擎:渲染引擎(渲染html.css).JavaScript引擎(运行JavaScript代码) B.Node是独立于浏览器的Ja ...

  3. OSGi.NET 学习笔记 [模块化和插件化][概念]

    [目录]-[模块化和插件化]-[概念] 这算是OSGi的基础和灵魂,没有他,后面将要介绍的很多功能都会黯然失色. 先看文档怎么说: 1) 物理隔离:基于UIOSP开发的模块是一个物理隔离的可单独部署的 ...

  4. Api接口的模块化管理

    Api接口的模块化管理 1.模块一 import axios from './axios' function login(){return axios.post('login'); } export ...

  5. grunt 压缩 html,如何使用 grunt 插件压缩合并 js ?减少页面请求数的秘诀

    本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规.大家都是程序员,不要闹得不开心. 安装好grunt后,苏南大叔下一步的计划就是配置Gruntfile.js这个配置文件.在这个文件中,苏南大叔采 ...

  6. 模块化以及插件化开发个人设计思路

    先解释下"模块化"与"插件化"的两个概念 1.模块化设计: 模块化设计,简单地说就是程序的编写不是开始就逐条录入计算机语句和指令,而是首先用主程序.子程序.子过 ...

  7. elasticSearch6源码分析(2)模块化管理

    elasticsearch里面的组件基本都是用Guice的Injector进行注入与获取实例方式进行模块化管理. 在node的构造方法中 /*** Constructs a node** @param ...

  8. iOS大型项目之模块化管理

    2019独角兽企业重金招聘Python工程师标准>>> iOS大型项目之模块化管理 待写 转载于:https://my.oschina.net/zhuzhu1223/blog/157 ...

  9. grunt入门讲解1:grunt的基本概念和使用

    Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.老版本的 Node. ...

  10. 组织管理插件-代码自动补全-语法检查等特性-SpaceVim v1.5.0

    简介: SpaceVim 是一个社区驱动的模块化 Vim/Neovim 配置集合,以模块的方式组织管理插件以 及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全, 语法检查. ...

最新文章

  1. 税友报税软件让修改服务器地址,税友报税软件让修改服务器地址
  2. Eclipse 教程
  3. android按键映射
  4. HDU 6030 Happy Necklace
  5. JavaWeb中的乱码解决方法总结
  6. 【PAT - 甲级1095】Cars on Campus (30分)(模拟)
  7. 小学五年级年级计算机教学计划,小学五年级信息技术教学计划范文
  8. 软件开发从需求分析开始
  9. Ubuntu,QT5连接MySQL
  10. 使用gc、objgraph干掉python内存泄露与循环引用!
  11. KiCad坐标文件(.pos)转表格(.xlsx)工具
  12. POJ 1436 Horizontally Visible Segments(线段树区间修改)
  13. 按键精灵手机版_关于截屏一些方法
  14. HTML 媒体(Media)
  15. 害怕,刷人超过70%?3招应对校招笔试|大厂笔试自救指南|应届生必看
  16. 图形学笔记(三)画一个彩色的三角形
  17. Flex/FlashBuilder4.5破解
  18. Linux搭建Hyperledger Fabric区块链框架 - Hyperledger Fabric模型概念
  19. 后端思想-如何设计一个操作和管理Excel的业务模块
  20. 哪项技术是计算机辅助外科的基础,计算机辅助外科手术计划和模拟原理和方法.pdf...

热门文章

  1. linux 命令:yum 详解
  2. VMware Workstation创建Windows 8.1虚拟机
  3. SQL 嵌套 N 层太长太难写怎么办?
  4. 用html制作奥运五环图案,用 canvas 制作奥运五环
  5. 「Python海龟画图」利用海龟画笔绘制奥运五环
  6. 怎么查看电脑配置详情
  7. Down Payment一个不错的练习
  8. 【2】CH347应用--在OpenOCD添加CH347-USB转JTAG接口
  9. java随机生成迷宫游戏地图_java随机生成迷宫(图的深度优先遍历)
  10. python舞蹈链数独游戏