前端开发Grunt工具的安装使用
随着前端开发效果越来越丰富,前端的结构也越来越复杂,这个时候就需要一个工具来进行管理,可以帮你做语法校验,文件拼接,代码压缩,文件清理等等琐事,Grunt就是这么一个不错的工具。
安装并不复杂,只要先安装nodejs和npm即可,这里介绍Ubuntu上的安装过程,不过Windows平台更加简单,去nodejs的官网下载一个稳定版本安装一下就完事了。
sudo apt install nodejs npm //安装nodejs,npm
sudo npm install -g grunt-cli //安装grunt的全局客户端
sudo ln -s /usr/bin/nodejs /usr/bin/node //解决找不到node文件或者文件夹错误
做完这些步骤,grunt就安装完毕了,可以通过node -v和npm -v来查看版本,注意不要用版本太低的版本,下载了其他库之后容易造成不兼容的问题。通过源上安装的,一般都是最新的稳定版本。
使用方法这里介绍一下,grunt的配置文件主要包含两个Gruntfile.js和package.json,其中Gruntfile.js就是我们用来编写执行脚本的文件,package.json则是用来保持项目基本配置信息的文件。通过执行
sudo npm init
可以开启一个初始化过程,在过程里可以填写项目的一些基本信息,也可以自己手动创建这个文件
//文件范例,也可以定义一些自定义的参数,遵循JSON的语法即可
{
"name": "demo", //项目名称
"version": "0.1.0", //版本号
"description": "demo", //项目描述
"license": "MIT", //协议
"devDependencies": { //使用的库的版本
"grunt": "^0.4.5",
"grunt-cmd-transport": "~0.5.0",
"grunt-contrib-clean": "~0.5.0",
"grunt-contrib-concat": "~0.5.0",
"grunt-contrib-copy": "~0.4.1",
"grunt-contrib-jshint": "~0.6.3",
"grunt-contrib-requirejs": "~0.4.1",
"grunt-contrib-uglify": "~0.2.1",
"grunt-strip": "~0.2.1"
},
"dependencies": {
"express": "3.x"
}
}
其中devDependencies节点一般不需要自己的填写。这个在安装库的时候,在命令尾部添加--save-dev会自动添加到这个节点。
常用的库包括以下几个:
sudo npm install grunt --save-dev
sudo npm install grunt-contrib-uglify --save-dev //使用uglifyJS进行js代码压缩
sudo npm install grunt-contrib-clean --save-dev //用于清理文件或者文件夹
sudo npm install grunt-contrib-copy --save-dev //复制文件和文件夹
sudo npm install grunt-contrib-jshint --save-dev //javascript 语法验证
sudo npm install grunt-contrib-contcat --save-dev //合并文件
sudo npm install grunt-contrib-cssmin --save-dev //压缩css文件
sudo npm install grunt-contrib-less --save-dev //把less文件编译为css文件
sudo npm install grunt-contrib-requirejs --save-dev //使用r.js优化RequireJS 项目
sudo npm install grunt-contrib-comprass --save-dev //使用Compass编译Sass
sudo npm install grunt-contrib-sass --save-dev //编译Sass文件
sudo npm install grunt-contrib-csslint --save-dev //语法验证css文件
sudo npm install load-grunt-tasks --save-dev //运用package.json中的配置加载插件的插件
关于Gruntfile.js的文件结构如下范例
/*!
* XXX's Gruntfile
*/
module.exports = function(grunt) {
'use strict'; grunt.initConfig({
pkg: grunt.file.readJSON('package.json'), // Metadata.
meta: {
libPath: 'lib/',
distPath: 'dist/',
jsPath: 'js/',
sassPath: 'sass/',
examplesPath: 'examples/hello/'
}, banner: '/*!\n' +
' * =====================================================\n' +
' * XXX v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
' * =====================================================\n' +
' */\n', clean: {
all: ['<%= meta.distPath %>']
}, concat: {
xxx: {
options: {
banner: '<%= banner %>'
},
src: [
'js/a.js',
'js/b.js'
],
dest: '<%= meta.distPath %>js/<%= pkg.name %>.js',
}
}, copy: {
fonts: {
expand: true,
src: 'fonts/xxx*.ttf',
dest: '<%= meta.distPath %>/'
},
examples: {
expand: true,
cwd: '<%= meta.distPath %>',
src: ['**/xxx*'],
dest: '<%= meta.examplesPath %>'
}
}, cssmin: {
options: {
banner: '', // set to empty; see bellow
keepSpecialComments: '*', // set to '*' because we already add the banner in sass
sourceMap: false
},
xxx: {
src: '<%= meta.distPath %>css/<%= pkg.name %>.css',
dest: '<%= meta.distPath %>css/<%= pkg.name %>.min.css'
}
}, uglify: {
options: {
banner: '<%= banner %>',
compress: {},
mangle: true,
preserveComments: false
},
mui: {
src: '<%= concat.xxx.dest %>',
dest: '<%= meta.distPath %>js/<%= pkg.name %>.min.js'
}
}, jshint: {
options: {
jshintrc: 'js/.jshintrc'
},
grunt: {
src: ['Gruntfile.js', 'grunt/*.js']
},
src: {
src: 'js/*.js'
}
},
csslint: {
options: {
csslintrc: 'sass/.csslintrc'
},
src: [
'<%= meta.distPath %>/css/<%= pkg.name %>.css',
]
}
});
// Load the plugins
require('load-grunt-tasks')(grunt, {
scope: 'devDependencies'
});
// Default task(s).
grunt.registerTask('cleanAll', ['clean']);
grunt.registerTask('dist-css', [ 'cssmin', 'clean:sourceMap']);
grunt.registerTask('dist-js', ['concat', 'uglify']);
grunt.registerTask('dist', ['clean:all', 'dist-css', 'dist-js', 'copy']);
grunt.registerTask('build', ['dist']);
grunt.registerTask('default', ['dist']);
};
一般常用的包括文件及文件夹清理,css文件校验,css文件合并,css文件压缩,js文件校验,js文件合并,js文件压缩,文件拷贝等几个功能。学会使用这几个功能就可以满足大部分的前端打包需求了。
另外,针对jshint的校验,经常会碰到的问题及处理方法
(1)Mixed double and single quotes /* jshint -W110 */
(2)'{a}' is defined but never used /* jshint unused:vars, -W004 */
(3)Don't make functions within a loop /* jshint loopfunc:true */
(4)Confusing use of '!' /* jshint -W018 */
(5)“‘{a}’ is not defined.”:“‘{a}’没有被定义”,针对一些全局变量可以使用/*global Q:true*/申明跳过该检查
(6)‘eval is evil.’:“尽量不要使用eval”, /*jshint -W061 */
另外,使用jshint还需要一个配置文件.hshintrc也放上来供大家参考
{
"asi": true,
"browser": true,
"node": true,
"jquery": true,
"esnext": true,
"strict": false,
"globalstrict": true,
"quotmark": true,
"undef": true,
"unused": true,
"scripturl": true,
"expr":true,
"shadow":true,
"-W014": false,
"globals": {
"define": false,
"module": true,
"export": true,
"console": false,
"alert":true,
"Q":true
}
}
csslint也需要一个这样的配置文件,
{
"important": false,
"adjoining-classes": false,
"known-properties": false,
"box-sizing": false,
"box-model": false,
"overqualified-elements": false,
"display-property-grouping": false,
"bulletproof-font-face": false,
"compatible-vendor-prefixes": false,
"regex-selectors": false,
"errors": false,
"duplicate-background-images": false,
"duplicate-properties": false,
"empty-rules": false,
"selector-max-approaching": false,
"gradients": false,
"fallback-colors": false,
"font-sizes": false,
"font-faces": false,
"floats": false,
"star-property-hack": false,
"outline-none": false,
"import": false,
"ids": false,
"underscore-property-hack": false,
"rules-count": false,
"qualified-headings": false,
"selector-max": false,
"shorthand": false,
"text-indent": false,
"unique-headings": false,
"universal-selector": false,
"unqualified-attributes": false,
"vendor-prefix": false,
"zero-units": false
}
前端开发Grunt工具的安装使用的更多相关文章
- Web前端开发必备工具推荐
http://gaohaixian.blog.163.com/blog/static/12326010520114265223489/不管你做前端开发还是网页重构,前端工具都起着非常重要的作用,这里向 ...
- Brackets前端开发IDE工具
Brackets是一个开源的前端开发IDE工具,网页设计师和前端开发人员必备的前端开发IDE工具. 它能够使你在开发WEB网站实时预览你的网页,目前版本只适用于Chrome浏览器可以实时预览效果 支持 ...
- 前端开发构建工具gulp的安装使用
曾几何时还在使用grunt作为前端的构建工具,直到有一天同事向我推荐了gulp,在这里博主将不讨论gulp与grunt各自优势的比较,只为大家介绍gulp如何安装和使用. Gulp 是用 nodejs ...
- 关于WEB前端开发的工具
俗话说:"工谷善其事,先必利其器."一个用得顺手的工具,确实能为我们的开发带来方 便,更重要的是会让我们更加享受工具开发过程中所带来的乐趣. 1.编码工具: 记事本之类的编辑器都可 ...
- vscode-wechat 小程序开发提示工具 vscode 安装
vscode 安装 vscode-wechat vscode-wechat 小程序开发提示工具 ---- 有了小程序开发提示,开发很方便 https://segmentfault.com/a/1190 ...
- 前端开发 Grunt 之 Connect
在前端开发过程中,我们需要在开发过程中,将开发中的站点部署到服务器上,然后,在浏览器中查看实际的效果,在 Grunt 环境下,可以直接使用集成在 Grunt 中的 Connect 插件完成站点服务器的 ...
- 前端开发 Grunt 之 Connect详解
在前端开发过程中,我们需要在开发过程中,将开发中的站点部署到服务器上,然后,在浏览器中查看实际的效果,在 Grunt 环境下,可以直接使用集成在 Grunt 中的 Connect 插件完成站点服务器的 ...
- 如何精准高效的实现视觉稿?------前端开发辅助工具AlloyDesigner使用介绍
AlloyDesigner:http://alloyteam.github.io/AlloyDesigner/ 介绍:AlloyDesigner是腾讯开发的一款工具,其在页面构建过程中,直接嵌入开发的 ...
- Dawn 阿里开源前端开发构建工具
Dawn 取「黎明.破晓」之意,原为「阿里云·业务运营团队」内部的前端构建和工程化工具,现已完全开源.它通过pipeline 和 middleware 将开发过程抽象为相对固定的阶段和有限的操作,简化 ...
随机推荐
- pycharm debug调试模式报“UnicodeDecodeError:'gdk' codec can't decode byte 0xac”,无法正常调试
遇到的问题: 本机python 3.8 pycharn 3.4.4 运行代码的时候,选择debug模式,提示"UnicodeDecodeError:'gdk' codec can't dec ...
- sqlserver - 查出的结果集,集成为json串放在一个字段里
1.效果 2.sql SELECT top 20 (select [name] as [名字] from staffBasicInfo For JSON PATH,ROOT('第一级key')) k ...
- centos7 系统正则符号
点符号 . 匹配任意一个字符,且只有一个字符 星符号 * 匹配任意0和或多个以上连续的字符 扩展符号 括号符号[] 匹配括号出现的字符信息 [^abc] --表示排除含有abc字符的内容,是单个字符a ...
- js实现工具函数中groupBy数据分组
数据 this.tableData = [ {id: 1, name: '测试', number: 1, price: 0}, {id: 2, name: '测试', number: 1, price ...
- STM32 EXTI(外部中断)
一.EXTI 简介 EXTI(External interrupt/event controller)-外部中断/事件控制器,管理了控制器的 20个中断/事件线.每个中断/事件线都对应有一个边沿检测器 ...
- R语言:关于rJava包的安装
R语言:关于rJava包的安装 盐池里的萝卜 2014-09-14 00:53:33 在做文本挖掘的时候,会发现分词时候rJava是必须要迈过去的坎儿,所以进行了总结: 第一步:安装rJava和jd ...
- 同步gitlab与github
1.找到setting 2.找到左下方的developer setting 3.按标好的数字依次执行 4.填写note并勾选repo 5.在最左下方勾选 6.保存生成的新的token到其他地方,之后你 ...
- Python-多线程及生产者与消费者
一.前置知识 1. 队列基础 如果不指定队列是什么,请自行查阅 在Python中,队列是最常用的线程间的通信方法,因为它是线程安全的 from queue import Queue # 创建队列 # ...
- git 重置密码后,本地电脑需要修改git密码
查看用户名git config user.name 查看密码git config user.password 查看邮箱git config user.email 修改密码git config --gl ...
- 从带Per-Building数据的KML/COLLADA中创建3D Tiles
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 许多Cesium的使用者经常需要将整个城市的数十万个三维建筑可视 ...