gulp打包普通项目
第一步:npm init 生成一个page.json
第二步建立一个gulpfile.js文件
主要是写这个文件
var gulp = require('gulp'),
rev = require('gulp-rev-append'),
fs = require('fs'),
fse = require('fs-extra'),
path = require('path'),
util = require('util');
var htmlmin = require('gulp-htmlmin'); //压缩html
var uglify = require('gulp-uglify'); //获取uglify(用于压缩)
var filter = require('gulp-filter');
var minifycss = require('gulp-minify-css'); //压缩css
var webpack = require("webpack");
gulp.task('revHtml',function(){
var options = {
removeComments: true,//清除HTML注释
collapseWhitespace: true,//压缩HTML
collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"
minifyJS: true,//压缩页面JS
//babel:true,
minifyCSS: true//压缩页面CSS
};
return gulp.src('./web/*.html')
.pipe(htmlmin(options))
.pipe(gulp.dest('./dist'))
});
gulp.task('static', function() {
fse.emptydirSync('./dist');
// gulp.src('./web/*.html')
// .pipe(rev())
// .pipe(gulp.dest('./dist'));
var map = {
js: function(pipe) {
pipe = pipe.pipe(filter("**/*.js"));
pipe = pipe.pipe(uglify());
return pipe;
},
css: function(pipe) {
pipe = pipe.pipe(filter("**/*.css"));
pipe = pipe.pipe(minifycss())
return pipe;
},
png: function(pipe) {
pipe = pipe.pipe(filter("**/*.png"));
return pipe;
},
gif: function(pipe) {
pipe = pipe.pipe(filter("**/*.gif"));
return pipe;
},
jpg: function(pipe) {
pipe = pipe.pipe(filter("**/*.jpg"));
return pipe;
},
svg: function(pipe) {
pipe = pipe.pipe(filter("**/*.svg"));
return pipe;
},
ttf: function(pipe) {
pipe = pipe.pipe(filter("**/*.ttf"));
return pipe;
},
woff: function(pipe) {
pipe = pipe.pipe(filter("**/*.woff"));
return pipe;
}
}
for(var item in map) {
var pipe = gulp.src('./web/**'); //压缩的文件
map[item](pipe).pipe(gulp.dest('./dist')); //输出的文件夹
}
});
gulp.task('staticwatch', function () {
gulp.watch(['./web/**/*'],['static']); //监听文件
})
gulp.task('default', function() {
fse.emptydirSync('dist');
gulp.start('revHtml');
gulp.start('static');
gulp.start('staticwatch');
});
这里面用到第三方的插件度要安装

这就是目录结构
运行gulp指令就可以了
这个还不是最优的,我在整理下
var gulp = require('gulp');
var concat = require('gulp-concat');//合并
var uglify = require('gulp-uglify');//压缩js
var rev = require('gulp-rev');//为静态文件随机添加一串hash值, 解决cdn缓存问题
var revCollector = require('gulp-rev-collector');//替换路径
var htmlmin = require('gulp-htmlmin'); ////使用gulp-htmlmin压缩html,可以压缩页面javascript、css,去除页面空格、注释,删除多余属性等操作。
var del = require('del');//删除文件
//压缩js
//gulp.src('./js/*.js') // * 匹配js文件夹下所有.js格式的文件
gulp.task('js',function(){
return gulp.src('./js/*.js')
.pipe(uglify())
.pipe(rev())
.pipe(gulp.dest('./build/js'))
.pipe(rev.manifest('rev-js-manifest.json'))
.pipe(gulp.dest('./build/js'));
});
//压缩css
var autoprefix = require('gulp-autoprefixer');//兼容处理
var minifyCss = require('gulp-minify-css');//压缩
gulp.task('style',function(){
return gulp.src('./css/*.css')
.pipe(autoprefix({
browsers: ['last 2 versions'],
cascade: false
}))
.pipe(minifyCss())
.pipe(rev())
.pipe(gulp.dest('./build/css'))
.pipe(rev.manifest('rev-css-manifest.json'))
.pipe(gulp.dest('./build/css'));
});
//img
gulp.task('images', function (){
return gulp.src(['./images/*.jpg','./images/*.png','./images/*.gif'])
.pipe(rev())//文件名加MD5后缀
.pipe(gulp.dest('./build/images'))
.pipe(rev.manifest('rev-images-manifest.json'))//生成一个rev-manifest.json
.pipe(gulp.dest('./build/images'));//将 rev-manifest.json 保存到 rev 目录内
});
//html
gulp.task('revHtml',function(){
var options = {
removeComments: true,//清除HTML注释
collapseWhitespace: true,//压缩HTML
collapseBooleanAttributes: true,//省略布尔属性的值 <input checked="true"/> ==> <input />
removeEmptyAttributes: true,//删除所有空格作属性值 <input id="" /> ==> <input />
removeScriptTypeAttributes: true,//删除<script>的type="text/javascript"
removeStyleLinkTypeAttributes: true,//删除<style>和<link>的type="text/css"
minifyJS: true,//压缩页面JS
//babel:true,
minifyCSS: true//压缩页面CSS
};
return gulp.src('./html/*.html')
.pipe(htmlmin(options))
.pipe(gulp.dest('./build/html'))
});
//使用rev替换成md5文件名,这里包括html和css的资源文件也一起
//gulp.src('./js/**/*.js') // ** 匹配js文件夹的0个或多个子文件夹
//使用rev替换成md5文件名,这里包括html和css的资源文件也一起
gulp.task('rev', function() {
//html,针对js,css,img
return gulp.src(['./build/**/*.json', './build/html/*.html'])
.pipe(revCollector({replaceReved:true }))
.pipe(gulp.dest('./build/html'));
});
gulp.task('revimg', function() {
//css,主要是针对img替换
return gulp.src(['./build/**/rev-images-manifest.json', './build/css/*.css'])
.pipe(revCollector({replaceReved:true }))
.pipe(gulp.dest('./build/css'));
});
gulp.task('revjs', function() {
//css,主要是针对img替换
return gulp.src(['./build/**/rev-images-manifest.json', './build/js/*.js'])
.pipe(revCollector({replaceReved:true }))
.pipe(gulp.dest('./build/js'));
});
//删除Build文件
gulp.task('clean:Build', function () {
return del([
'./build/**/',
]);
});
//执行多个任务gulp4的用法 gulp.series()串行,gulp.parallel()并行
gulp.task('default', gulp.series('clean:Build', gulp.parallel('js','images','style','revHtml'),'rev','revimg','revjs',function(){
}))
gulp打包普通项目的更多相关文章
- 使用gulp打包普通项目
前言: 在使用gulp打包工具之前,我做的H5项目在浏览器中的缓存是很严重的,若改了一点css,加了一句js代码,不手动清除浏览器缓存是看不到效果的.老总也在项目演示当中遇到这些问题,一查找原因却是缓 ...
- Angular企业级开发(6)-使用Gulp构建和打包前端项目
1.gulp介绍 基于流的前端自动化构建工具,利用gulp可以提高前端开发效率,特别是在前后端分离的项目中.使用gulp能完成以下任务: 压缩html.css和js 编译less或sass等 压缩图片 ...
- 用gulp打包带参数资源做法与asp.net/java项目结合的自动构建方案探讨
先探讨方案,后续再实现. gulp打包前端教程配置:http://www.cnblogs.com/EasonJim/p/6209951.html 可能存在以下场景: 1.整个服务端采用接口的形式暴露给 ...
- gulp进阶构建项目由浅入深
gulp进阶构建项目由浅入深 阅读目录 gulp基本安装和使用 gulp API介绍 Gulp.src(globs[,options]) gulp.dest(path[,options]) gulp. ...
- [如何在Mac下使用gulp] 1.创建项目及安装gulp
1.创建项目 2.安装gulp 3.创建gulpfile.js文件 4.运行gulp 创建项目 -创建项目文件夹命名为firstGulp,并在firstGulp目录下运行 npm init .npm ...
- gulp打包详解
gulp的作用 删除文件中冗余的内容,压缩文件,减小文件体积 实际项目中运行的都是压缩完成以后的文件 减小加载响应时间 gulp打包压缩对象 html,css,js,sass,webserver 音频 ...
- 使用gulp解决RequireJS项目前端缓存问题(二)
1.前言 这一节,我们主要解决在上一节<使用gulp解决RequireJSs项目前端缓存问题(一)>末尾提到的几个问题: 对通过require-config.js引入的js文件修改后,没有 ...
- 使用gulp解决RequireJS项目前端缓存问题(一)
1.前言 前端缓存一直是个令人头疼的问题,你有可能见过下面博客园首页的资源文件链接: 有没有发现文件名后面有一串不规则的东东,没错,这就是运用缓存机制,我们今天研究的就是这种东西. 先堵为快,猛戳链接 ...
- 打包java项目为可执行程序(exe)
一直都是编写了java程序后在控制台 javac --> java 命令运行,或者在eclipse中运行,今天突然想怎么可以写好了一个项目随处可以运行呢? 于是网上搜了步骤,跟着一步一步实现了, ...
随机推荐
- strct配置文件详解
1,strct配置文件详解 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configurati ...
- java集合树状结构及源码
java集合树状结构及源码 最近一直想看一下java集合的源码,毕竟平时用的比较多,但总是感觉是跟着习惯new出来一个对象,比如ArrayList,HashMap等等,所以就简单的看了一下,了解了一下 ...
- 数据库新增“自动添加”类字段 auto_now_add 如何不影响之前数据
django 中的模版为例:time = models.DateTimeField('创建时间', auto_now_add=True)这样显然是不行的.那么.我们可以考虑先给前面数据一个默认值迁移一 ...
- JavaScript数组方法--includes、indexOf、lastIndexOf
我们继续吧! includes:includes() 方法用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false.还是先看看includes的用法吧 var ar ...
- Angular6 Observable.fromEvent error: “Invalid event target”
今天在angular6项目中写了个拖拽功能,但是控制台报错,如图 后来在控制台打出发现,原来是 ngOnInit( ) 这个生命周期里,页面的dom节点还未产生,还只是null. 改为用 ngAfte ...
- 显示开机信息-dmesg
显示开机信息-dmesg kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息,可利用dmesg来查看.开机信息亦保存在/var/log目录中,名称为dmesg的文件里. ...
- Hive实现交叉二维分析的小语句
1. 梳理出你要的列和行维度 列维度: 每一周 行维度: 年级 + 学科 + 班型 2. 对数据按周增序进行聚合 (即根据列维度) ,生成list concat_ws 和 collect_list ( ...
- mac eclipse中运行tomcat出现错误:-Djava.endorsed.dirs=D:\Tomcat 9.0\endorsed is not supported
-Djava.endorsed.dirs=D:\Tomcat 9.0\endorsed is not supported. Endorsed standards and standalone APIs ...
- WINAPI方式在windows不同缩放比下取得正确的分辨率
作者: 国家电网河南原阳县供电公司 俏狐:86074731 这个问题我在国内外的很多论坛查资料都没有找到,只有自己研究了,希望可以帮到需要的朋友.本文为原创,转 载请注明出处. #coding:utf ...
- JavaScript字符串操作方法大全,包含ES6方法
一.charAt() 返回在指定位置的字符. var str="abc" console.log(str.charAt(0))//a 二.charCodeAt() 返回在指定的位置 ...