grunt安装与配置
安装 CLI
npm install -g grunt-cli//全局安装 npm init //初始化package.json
npm init 命令会创建一个基本的package.json文件。
npm install grunt --save-dev npm install grunt-contrib-jshint --save-dev
.......//安装你需要的依赖
安装完以后在package.json的同级创建一个Gruntfile.js配置文件
配置如下
module.exports = function(grunt) {
var timestamp = new Date().getTime();
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
//文件合并
concat: {
options: {
//定义一个用于插入合并输出文件之间的字符
seperator: ';'
},
build: {
//将要合并的文件
// src:['src/**/*.js'],
//合并后的js文件的存放位置
// dest:['build/<%= pkg.name %>.js']
files: { // Dictionary of files
'dist/css/main.css': ['src/**/*.css', '!src/**/*.min.css'],
'dist/js/index.js': 'src/**/*.js'
//'src/sass/all.scss':'src/sass/*.scss'
}
},
concatsass: {
files: {
'src/sass/all.scss': 'src/sass/*.scss'
}
}
},
//压缩js
uglify: {
options: {
banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'
},
/*dist:{
files:{
'dist/<%= pkg.name %>.min.js':['<%= concat.dist.dest %>']
}
}*/
build: {
src: 'dist/js/index.js',
dest: 'dist/js/index.min.js'
}
},
//压缩html
htmlmin: {
options: { // Target options
removeComments: true,
removeCommentsFromCDATA: true
// collapseWhitespace: true,
// minifyCSS:true
// collapseBooleanAttributes: true,
// removeAttributeQuotes: true,
// removeRedundantAttributes: true,
// useShortDoctype: true,
// removeEmptyAttributes: true,
// removeOptionalTags: true
},
html: {
files: [{ // Dictionary of files
expand: true,
cwd: 'dist',
src: ['**/*.html'],
dest: 'dist' //'destination':'source'
}]
}
},
//js的语法检测
jshint: {
files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js', '!src/**/*.min.js'],
options: {
//这里是覆盖JSHint默认配置的选项
globals: {
jQuery: true,
console: true,
module: true,
document: true
}
}
},
//css压缩
cssmin: {
options: {
//shorthandCompactiong:false,
roundingPercision: -1 //这个属性应该是将样式相同的都提取出来
},
build: {
files: {
// 'dist/css/main.css': 'dist/css/main.css'
}
}
},
//
// qunit:{
// files:['test/**/*.html']
// },
//监听事件
watch: {
build: {
files: ['<%= jshint.files %>', 'src/**/*.css'],
tasks: ['jshint', 'qunit'],
options: { spawn: false }
}
},
//处理html中css、js 引入合并问题
usemin: {
html: 'dist/**/*.html',
options: {
blockReplacements: {
js: function(block) {
return '<script type="text/javascript" src="' + block.dest + '?t=' + timestamp + '"></script>';
},
css: function(block) {
return '<link rel="stylesheet" type="text/css" href="' + block.dest + '?t=' + timestamp + '"/>';
}
}
}
},
//
//copy
copy: {
src: {
files: [
{ expand: true, cwd: 'src', src: ['**/*.html'], dest: 'dist' }, //设置的相对于哪个路径找文件就是cwd的值,这里我写的html在test文件里,所以设置成test;所有的源文件路径,都是相对于cwd
//dist 目标路径
{ expand: true, cwd: 'src/css', src: ['*.min.css'], dest: 'dist/css' },
{ expand: true, cwd: 'src/js', src: ['*.min.js'], dest: 'dist/js' }
]
},
image: {
files: [
{ expand: true, cwd: 'src', src: ['images/**/*.{png,jpg,jpeg,gif}'], dest: 'dist' }
]
},
robots: {
files: [
{ expand: true, cwd: 'src', src: ['robots.txt'], dest: 'dist' }
]
}
},
//图片压缩
imagemin: {
static: { // Target
options: { // Target options
optimizationLevel: 3,
svgoPlugins: [{ removeViewBox: false }],
use: []
},
files: { // Dictionary of files
// 'dist/img.png': 'src/img.png', // 'destination': 'source'
// 'dist/img.jpg': 'src/img.jpg',
// 'dist/img.gif': 'src/img.gif'
}
},
dynamic: { // Another target
files: [{
expand: true, // Enable dynamic expansion
cwd: 'src/', // Src matches are relative to this path
src: ['**/*.{png,jpg,gif}'], // Actual patterns to match
dest: 'dist' // Destination path prefix
}]
}
},
//requirejs 打包
requirejs: {
options: {
baseUrl: '',
paths: {
"$": 'src/zepto',
"_": 'src/underscore',
"B": 'src/backbone'
},
include: ['$', '_', 'B'],
out: 'dist/libs.js' //会将include里面的文件打包为out对应的文件,paths的本身意义不大,就是用于配置include里面的指向
}
},
//sprite 雪碧图 //grunt-spritesmith
sprite: {
options: {
//追加时间戳,默认不追加
spritestamp: true
},
//image-set 示例
all: {
src: 'src/images/*.jpg',
dest: 'dist/images/spritesheet.png',
destCss: 'dist/css/sprites.css'
}
},
sass: {
dist: {
// src:'src/**/*.scss',
// dest:'dist/css/compiled.css'
options: { // Target options
style: 'expanded'
},
files: {
'src/css/all.css': 'src/sass/all.scss'
}
}
},
//清理文件
clean: {
html: ['dist/**/*.html'],
sass: ['src/sass/all.scss'],
css: ['dist/css/*.css'],
js: ['dist/js/*.js'],
images: ['dist/images/**/*.{png,jpg,jpeg,gif}']
},
//合并 html
includereplace: {
dist: {
files: [
{ src: ['**/*.html'], dest: 'dist', expand: true, cwd: 'src' }
]
}
}
});
//加载包含"uglify" 任务的插件
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-contrib-jshint');
//grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.loadNpmTasks('grunt-contrib-htmlmin');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-imagemin');
grunt.loadNpmTasks('grunt-usemin');
grunt.loadNpmTasks('grunt-contrib-requirejs');
grunt.loadNpmTasks('grunt-spritesmith');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-include-replace');
//默认被执行的任务列表
//grunt.registerTask('dev',['clean','copy','concat','sass','uglify','copy','usemin','htmlmin']);
grunt.registerTask('dev', ['clean', 'jshint', 'copy', 'concat:concatsass', 'sass', 'concat:build', 'uglify', 'includereplace', 'usemin']);
grunt.registerTask('dist', ['clean', 'jshint', 'copy', 'concat:concatsass', 'sass', 'concat:build', 'uglify', 'cssmin', 'includereplace', 'usemin']);
};
grunt安装与配置的更多相关文章
- Grunt 安装与配置环境
当时学习 Grunt 的时候,真是很头疼.分了两个时间段,学习了两次才硬啃下来,之后才能用在项目中.主要原因我认为是学习资料和文档上面写的太高端了.这类的文档或者资料有个显著特点,上来先简单介绍一下这 ...
- grunt安装、配置、在webstrom中使用
1.全局范围安装 Grunt命令行(CLI) npm install -g grunt-cli Grunt CLI的任务很简单:调用与Gruntfile在同一目录中 Grunt.这样带来的好处是,允许 ...
- grunt安装,配置记录
进了新的公司,需要重构一个项目,从头开始.本人患懒癌已久,一直没有写博客的打算,也是因为资质还比较浅,写不出什么富有涵养的内容,后来想了想,就当自己的笔记吧.这次从新开始,未尝不是一个博客开始的好时机 ...
- Grunt安装配置教程:前端自动化工作流
Grunt这货是啥? Grunt 是一个基于任务的 JavaScript 项目命令行构建工具. 最近很火的前端自动化小工具,基于任务的命令行构建工具 http://gruntjs.com Grunt能 ...
- 学习安装并配置前端自动化工具Gulp
Gulp和所有Gulp插件都是基于nodeJs来运行的,因此在你的电脑上需要安装nodeJs,安装过程请移驾安装并配置前端自动化工具--grunt.安装完成后,通过运行cmd进入DOS命令窗口,如图: ...
- javascript grunt安装和使用
grunt是javascript世界的构建工具. 为何要用构建工具? 一句话:自动化.对于需要反复重复的任务,例如压缩(minification).编译.单元测试.linting等.自动化工具可以减轻 ...
- elasticsearch以及head插件在centos7上的安装与配置教程
ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearch是用Java开发的,并作为Apach ...
- elasticsearch(一):安装与配置
一.elastic search的安装与配置 1.安装Java 并且配置JAVA_HOME环境变量. 2.下载elasticsearch,下载地址:https://www.elastic.co/dow ...
- Elasticsearch 6.3.1、Head插件 安装及配置
安装Elasticsearch Elasticsearch下载地址:https://www.elastic.co/cn/downloads/elasticsearch 也可以直接使用wget下载到某目 ...
随机推荐
- 网站第三方登陆(一) QQ登陆
QQ 登陆是指,通过qq的用户名和密码,登录网站,不需要注册,网站的用户名和密码.如下图 一旦你授权了,就可以进入网站了,要实现这个效果 1.去qq互联平台(http://connect.qq.com ...
- js判断是否是微信浏览器
<script type="text/javascript"> window.onload = function(){ if(isWeiXin()){ var p = ...
- easy ui datagrid 让某行复选框不能选中
//百度查找出来的 onLoadSuccess: function(data){//加载完毕后获取所有的checkbox遍历 if (data.rows.length > ...
- Process Explorer使用图文教程
这是一款由Sysinternals开发的Windows系统和应用程序监视工具,目前Sysinternals已经被微软收购,此款不仅结合了文件监视和注册表监视两个工具的功能,还增加了多项重要的增强功能, ...
- web.config连接字符串的一些总结
阅读目录: DS01:数据库连接字符串的两种写法 DS02:数据库连接字符串的内容 DS01:数据库连接字符串的两种写法 1.连接字符串的两种写法: <configuration> & ...
- 使用 Eclipse PhoneGap 构建 Android 应用程序入门
Eclipse 是一种支持多种技术的开源集成开发环境 (IDE),但本文重点介绍 Java 支持,这也是 Android 应用程序的“母语”.Android 是 Google 发布的开源移动操作系统. ...
- 新手要想学好Linux系统就必须做好这四件事情
一般情况下,大部分人接触Linux的机会并不多,对Linux平台下的开发更是一无所知.而现在的发展趋势却越来越表明:无论是作为一个优秀的软件开发人员,或是互联网.IT行业的从业人员,掌握Linux是一 ...
- .NET 3.5 安装错误的四个原因及解决方法
.net framework 3.5 安装错误的四个常见原因及解决方法,飓风软件站整理,转载请注明. 1.清除所有版本 .NET Framework 安装错误后在系统中遗留的文件: 如果您以往安装过 ...
- java知识巩固
1.从控制台读取一个字符: public static void main(String args[]) throws java.io.IOException{ char c=(char)System ...
- Android中的slidingmenu
简介 SlidingMenu作为滑动侧边栏主要用来代替Android传统的Menu菜单. 导入方法 SlidingMEnu以前依赖于另一个开源库ActionBarSherlock,但是现在被AppCo ...