grunt -- javascript自动化工具
grunt 是一个基于npm,node.js 用js编写的工具框架,可以自动完成一些重复性的任务(如合并文件,语法检查,压缩代码),
grunt拥有庞大的插件库,可以满足各种自动化批处理需求,常用的插件有:
concat ---> 合并文件
csslint ---> css语法检查
cssmin ---> css压缩
jshint ---> js语法检查
uglify ---> js压缩
watch ---> 自动化核心,监视文件修改并执行插件
autoprefixer ---> css浏览器前缀补全
node.js,grunt和grunt-cli 的安装略.
插件安装指令:
npm install grunt-contrib-concat --save-dev
npm install grunt-contrib-csslint --save-dev
npm install grunt-contrib-cssmin --save-dev
npm install grunt-contrib-jshint --save-dev
npm install grunt-contrib-uglify --save-dev
npm install grunt-contrib-watch --save-dev
npm install grunt-autoprefixer --save-dev
npm package.json 安装完插件后的配置
{
"name": "grunt_test",
"version": "1.0.1",
"devDependencies": {
"grunt": "^1.0.1",
"grunt-autoprefixer": "^3.0.4",
"grunt-contrib-concat": "^1.0.1",
"grunt-contrib-csslint": "^2.0.0",
"grunt-contrib-cssmin": "^1.0.2",
"grunt-contrib-jshint": "^1.0.0",
"grunt-contrib-uglify": "^2.0.0",
"grunt-contrib-watch": "^1.0.0"
}
}
[重中之重] Gruntfile.js grunt配置文件
//包装函数
module.exports=function (grunt) {
//任务配置,所有插件的配置信息
grunt.initConfig({
//获取 package.json 的信息
pkg:grunt.file.readJSON('package.json'), //js压缩
uglify: {
options: {
//头部注释
banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' +
'<%= grunt.template.today("yyyy-mm-dd") %> */',
//生成sourceMap
sourceMap: true
},
my_target: {
files: [
{
expand: true,
//源文件相对路径
cwd: 'src/',
//选择文件
src: ['*.js','!*.min.js'],
//目标文件输出目录
dest: 'dest/',
//后缀
ext: '.min.js'
}
]
}
}, //js语法检查
jshint: {
options:{
jshintrc:'.jshintrc'
},
my_target: ['src/*.js'],
}, //css压缩
cssmin:{
options: {
//文件头部输出信息
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n',
//美化代码
beautify: {
//中文ascii化,非常有用,防止中文乱码
ascii_only: true
}
},
my_target: {
files: [
{
expand: true,
//源文件相对路径
cwd: 'src/',
//选择文件
src: ['*.css','!*.min.css'],
//目标文件输出目录
dest: 'dest/',
//后缀
ext: '.min.css'
}
]
}
}, //css语法检查
csslint:{
options:{
csslintrc:'.csslintrc'
},
build:['src/*.css']
}, //自动化
watch:{
test1:{
tasks:['jshint','uglify'],
options:{spawn:false}
},
test2:{
tasks:['csslint','cssmin'],
options:{spawn:false}
}
}, //合并文件
concat: {
options: {
separator: ';\n',
stripBanners: true,
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
dist: {
src: ['src/*.js'],
dest: 'dest/basic.js',
},
}, //css浏览器前缀补全
autoprefixer: {
options: {
browsers: ['Chrome < 50', 'ie > 8' ,'ff < 20','opera < 39']
},
your_target: {
files: [
{
expand: true,
//源文件相对路径
cwd: 'src/',
//选择文件
src: ['*.css','!*.min.css'],
//目标文件输出目录
dest: 'dest/',
//后缀
ext: '.fix.css'
}
]
},
}, }); //告诉grunt我们将要使用的插件
grunt.loadNpmTasks('grunt-contrib-concat');//合并代码
grunt.loadNpmTasks('grunt-contrib-jshint');//js语法检查
grunt.loadNpmTasks('grunt-contrib-csslint');//css语法检查
grunt.loadNpmTasks('grunt-contrib-cssmin');//css压缩
grunt.loadNpmTasks('grunt-contrib-uglify');//js压缩
grunt.loadNpmTasks('grunt-contrib-watch');//自动化核心,监视文件修改并执行插件
grunt.loadNpmTasks('grunt-autoprefixer');//css浏览器前缀补全
//告诉grunt当我们在终端中输入grunt时需要做些什么(注意先后顺序)
grunt.registerTask('cont',['concat']);
grunt.registerTask('afix',['autoprefixer']);
grunt.registerTask('mcss',['cssmin']);
grunt.registerTask('mjs',['uglify']);
grunt.registerTask('default',['jshint','uglify','watch']);
}
1,js,css压缩配置中,都是多个文件单独压缩生成多个对应文件名的.min.js或.min.css,并生成对应的sourceMap
2,autoprefixer配置中browsers: ['Chrome < 50', 'ie > 8' ,'ff < 20','opera < 39'], 设定要兼容的浏览器版本,故意将版本设置调低,可以兼容给多的浏览器,否则默认只兼容
['> 1%', 'last 2 versions', 'Firefox ESR'] 最新版本的主流浏览器
3,js语法检查和css语法检查都引用了外部配置文件(json格式) .jshintrc 和 .csslintrc ,如下
.jshintrc:
{
"curly": true,
"eqeqeq": true,
"eqnull": true,
"browser": true,
"boss":false,
"expr":true,
"immed":true,
"newcap":true,
"noempty":true,
"noarg":true,
"undef":true,
"regexp":true,
"node":true,
"devel":true,
"globals": {
"jQuery": true
}
}
.csslintrc
{
"adjoining-classes":false,
"box-sizing":false,
"box-model" : false,
"compatible-vendor-prefixes": false,
"floats":false,
"font-sizes":false,
"gradients":false,
"important":false,
"known-properties":false,
"outline-none":false,
"qualified-headings":false,
"regex-selectors":false,
"shorthand":false,
"text-indent":false,
"unique-headings":false,
"universal-selector":false,
"unqualified-attributes":false
}
执行相应task:
已经注册的task, grunt.registerTask('mcss',['cssmin']') , 执行命令为 grunt mcss
未注册的task, 可以直接调用相应插件,执行命令为 grunt cssmin
grunt -- javascript自动化工具的更多相关文章
- 前端开发自动化工作流工具,JavaScript自动化构建工具grunt、gulp、webpack介绍
前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...
- JavaScript自动化构建工具grunt、gulp、webpack介绍
前端开发自动化工作流工具,JavaScript自动化构建工具grunt.gulp.webpack介绍 前端自动化,这样的一个名词听起来非常的有吸引力,向往力.当今时代,前端工程师需要维护的代码变得及为 ...
- 前端见微知著工具篇:Grunt实现自动化
转载说明 本篇文章为转载文章,来源为[前端福利]用grunt搭建自动化的web前端开发环境-完整教程,之所以转载,是因为本文写的太详细了,我很想自己来写,但是发现跳不出这篇文章的圈子,因为写的详尽,所 ...
- 如何选择JavaScript构建工具之Babel、Browserify、Webpack、Grunt以及Gulp
当我们开始一个新的 JavaScript 项目时,我们需要考虑的第一件事就是搭建一个前端编译环境.但是在面对众多的 JavaScript 构建工具时,我们却无所适从,不知道究竟哪一个才是最适合我们的. ...
- Javascript自动化文档工具JSDuck在Windows下的使用心得
作者: zyl910 一.工具比较 为了让前端JavaScript程序更具可维护性,更利于团队开发,文档非常重要.此时便需要使用自动化文档工具了. 我对比了各种JavaScript自动化文档工具,发现 ...
- Grunt自动化工具相关
Grunt 项目中安装grunt模块npm install grunt --save,删除模块 npm uninstall grunt ,缺失某个插件:npm install grunt-contri ...
- 前端自动化工具 -- grunt 使用简介
grunt作为一个前端构建工具,有资源压缩,代码检查,文件合并等功能. 下面就简单了解grunt的使用. 一.环境配置 grunt是基于nodejs的,所以需要一个 nodejs 环境,未了解的可以 ...
- Autojs - 用 JavaScript 实现自己的安卓手机自动化工具脚本
我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...
- 前端自动化工具gulp自动添加版本号
之前,我介绍了学习安装并配置前端自动化工具Gulp,觉得gulp确实比grunt的配置简单很多,于是我决定再深入学习一下gulp,就去网上查了资料,发现gulp还可以自动添加版本号,这个功能就为我平时 ...
随机推荐
- bootstrap导航条
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>我的 ...
- K-means聚类
聚类算法,无监督学习的范畴,没有明确的类别信息. 给定n个训练样本{x1,x2,x3,...,xn} kmeans算法过程描述如下所示: 1.创建k个点作为起始质心点,c1,c2,...,ck 2.重 ...
- Web工程师的工具箱
RequestBin:允许你创建一个URL,利用这款工具进行收集请求,然后通过个性化方式进行检查. Hurl:发出HTTP请求,输入URL,设置标题,查看响应,最后分享给其他人.类似的工具有:REST ...
- 看源码之Adapter和AdapterView之间的关系
总述 Android中"列表"的实现其实一个典型的MVC模式,其实中AdapterView相当于是View,负责视图的绘制以及视图的事件响应,Adapter相当于是Controll ...
- 你不知道的JavaScript(作用域和闭包)
作用域和闭包 ・作用域 引擎:从头到尾负责整个JavaScript的编译及执行过程. 编译器:负责语法分析及代码生成等. 作用域:负责收集并维护由所有声明的标识符(变量)组成的一系列查询,并实施一套非 ...
- java_method_正则校验
/** * * @Title: validadeRegExp * @Descrption : TODO (正则校验) * @param regExp * @param obj * @return * ...
- js-ajax实现获取xmlHttp对象
//获取xmlHttp对象 function createXMLHttp() { var xmlhttp; //对于大多数浏览器适用 if (window.XMLHttpRequest) { xmlh ...
- iOS项目管理:目录结构和开发流程
iOS项目管理:目录结构和开发流程 最近正在做一个大版本的更新,现在在重构中.... 发现很多人在一个项目的开始不知道开发流程是什么,也不是非常清晰的知道一个项目该有目录结构.如果项目小或者是 ...
- IOS笔记 1
< ![CDATA[ 笔记 UIWindows 与UIView的关系iOS的坐标系统视图层次结构视图坐标(Frame和Bounds区别)UIView的常用属性和方法坐标系统的变换UIView内容 ...
- mongose排序查询
Kc.find({bjid:req.params.bjid}).sort({'_id':1}).exec(function(err,kcs){ if(err){ res.json({no:0,msg: ...