前端开发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 将开发过程抽象为相对固定的阶段和有限的操作,简化 ...
随机推荐
- Java工程编码格式由GBK转化成utf-8(编码格式互转)
在写项目的过程中我发现有的地方编码格式被设置成了 gbk 如果用eclipse等工具直接改回utf-8编码格式则会出现乱码. 下载:https://download.csdn.net/download ...
- SYCOJ798Biorhythms
https://oj.shiyancang.cn/Problem/798.html #include<bits/stdc++.h> using namespace std; typedef ...
- 【洛谷】P1067 多项式输出
原题链接:P1067 多项式输出 题目分析:学长推荐的OJ网站 --洛谷,发现挺好用的还可以下载提交出错的数据. 废话就不多说了,这道题属于基础题.提交出错主要是因为一些小细节不到位,这里就不一一赘述 ...
- vscode搜索高亮个性化设置
"workbench.colorCustomizations": { "editor.selectionHighlightBorder": "#1ED ...
- CTF-sql-sql约束注入
create table user( id int not null auto_increment, username varchar(30) not null, password varchar(3 ...
- 《剑指offer》面试题66. 构建乘积数组
问题描述 给定一个数组 A[0,1,-,n-1],请构建一个数组 B[0,1,-,n-1],其中 B 中的元素 B[i]=A[0]×A[1]×-×A[i-1]×A[i+1]×-×A[n-1].不能使用 ...
- rocketmq实现延迟队列精确到秒级实现方案1-代理实现
简单的来说,就是rocketmq发送消息到broker的时候,判断是否定时消息, 如果是定时消息,将消息发送到代理服务(这个是一个独立的服务,需要自己开发,定时地把消息发送出去), 当然了消息用什么来 ...
- vue组件实现图片的拖拽和缩放
vue实现一个组件其实很简单但是要写出一个好的可复用的组件那就需要多学习和钻研一下,一个好的组件必须有其必不可少的有优点:一是能提高应用开发效率.测试性.复用性等:二是组件应该是高内聚.低耦合的:三是 ...
- 【刷题-LeetCode】122 Best Time to Buy and Sell Stock II
Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...
- CesiumJS新增官方TypeScript类型定义
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 在当前的1.70版本中,CesiumJS现在附带了正式的Type ...