今天不讲webpack,就说说gulp是怎么进行压缩合并打包 

首先你的安装gulp :

npm install gulp -g --save-dev

然后最基本的你因该知道gulp 的四个方法,

gulp.src:读取文件

gulp.pipe:将文件流输入到指定的文件目录

gulp.task:建立gulp任务,例如合并,压缩,清除文件,

gulp.watch:用于监听文件的变化

关于其他的嘛,那就是gulp 之所以那么强大,原因就是他有很多插件,我们要完成一些功能就必须要学会使用一些插件

1)在这里我给出package.json 文件中的devDependencies

    "gulp": "^3.9.1",          //安装gulp
"gulp-clean": "^0.3.2",      //gulp的清除插件,主要用于每次打包发布,为了不出差错,我们希望要删除之前的一些文件
"gulp-concat": "^2.6.1",     //合并文件 
"gulp-connect": "^5.0.0",     //建立一个本地server,这样我们就可以使用localhost:port 访问我们的项目了 
"gulp-livereload": "^3.8.1",   //实时监控 
"gulp-minify-css": "^1.2.4",   //压缩css 
"gulp-minify-html": "^1.0.6",  //压缩html
"gulp-open": "^2.0.0",      //一般与gulp-connect使用,
"gulp-rev": "^8.1.0",        //主要用于缓存文件,给文件加上一个MD5后缀。
"gulp-rev-collector": "^1.2.3",  //主要用于缓存文件处理,替换文件[这里可以去了解gulp 缓存的问题,百度一下]
"gulp-sequence": "^0.4.6",    //多个任务的执行顺序控制
"gulp-sync": "^0.1.4",
"gulp-uglify": "^3.0.0",      //压缩js

2)在你完成一系列安装之后,接下就是使用安装的插件完成一些东西。

首先你的在你的项目文件夹中有一个gulpfile.js文件【这个文件你可以把他看作你的gulp 启动文件】

在这个文件中你可以一一引进你安装的gulp插件

例如:

var gulp = require("gulp");

//压缩
var uglify = require("gulp-uglify");
var minifyCss = require("gulp-minify-css");
var minifyHtml = require("gulp-minify-html"); //清除不不要的文件
var gulpclean = require('gulp-clean');
// npm install gulp-open --save-dev //本地打开一个地址
var open=require("open"); //npm install --svae-dev gulp-livereload(重新加载,刷新)
var livereload = require('gulp-livereload'); //npm install --svae-dev gulp-connect(本地服务器)
var connect= require('gulp-connect'); //npm install --save-dev gulp-rev-collector
//npm install --save-dev gulp-sync
var rev = require('gulp-rev');
var revCollector = require('gulp-rev-collector'); //合并文件(用于压缩之后)
//npm install --save-dev gulp-concat
var concat = require('gulp-concat'); //多个任务的顺序执行
//npm install --save-dev gulp-sequence
var gulpSequence = require('gulp-sequence');

当然你也可以用一个简单的方法,可以去get一下gulp-load-plugins的使用

3)好了现在就正式使用了

gulp.task('js',function(){
return gulp.src('myPro/js/**/*.js')
.pipe(concat('main.js')) //- 合并后的文件名
.pipe(uglify()) //使用uglify进行压缩,更多配置请参考:
.pipe(rev()) //- 文件名加MD5后缀
.pipe(gulp.dest('dist/js'))
.pipe(rev.manifest()) //- 生成一个rev-manifest.json(这个文件是我们控制缓存文件的关键,主要用于文件替换)
.pipe(gulp.dest('dist/rev/js'))
.pipe(livereload());
}); gulp.task('html',function(){
return gulp.src('myPro/**/*.html')
.pipe(minifyHtml()) //压缩
//.pipe(rev())
.pipe(gulp.dest('dist'))
.pipe(livereload());
}); gulp.task('css',function(){
return gulp.src('myPro/css/**/*.css')
.pipe(concat('main.css'))
.pipe(minifyCss()) //压缩css
.pipe(rev()) //- 文件名加MD5后缀
.pipe(gulp.dest('dist/css'))
.pipe(rev.manifest()) //- 生成一个rev-manifest.json
.pipe(gulp.dest('dist/rev/css')) //- 将 rev-manifest.json 这个文件是我们控制缓存文件的关键,主要用于文件替换)
.pipe(livereload());
}); gulp.task('watch', function() {
/*
livereload.listen({
start:true,
port:8080,
reloadPage:"index.html" }); //要在这里调用listen()方法
*/ //自动刷新
livereload.listen();
//构建本地服务器
connect.server({
root:['myPro'],//从开发文件读取(默认是index.html)
livereload:true,//重新刷新(针对高级浏览器)
port:,//端口号
});
open("http://localhost:8091");//自动打开地址,网页
//监听改变的文件,只要有以下的文件内容变化,就会刷新
gulp.watch('myPro/css/**/*.css', ['css']);
gulp.watch('myPro/html/**/*.html', ['html']);
gulp.watch('myPro/js/**/*.js', ['js']);
}); //清除dist文件夹
gulp.task("clean",function(){
console.log("......do clearing......");
return gulp.src(['dist'],{read: false}) //{read: false}直接进行删除,不需要读取文件
   .pipe(gulpclean({force: true})) //{force: true}强制删除
  .pipe(livereload());
}); //使用gulp-rev替换文件,清除缓存的弊端问题
gulp.task("rev",function(){
return gulp.src(['dist/**/*.json','dist/**/*.html'])
.pipe(revCollector({
replaceReved: true,
}))
.pipe(gulp.dest('dist'))
.pipe(livereload());
}); //建立一个总的任务
gulp.task("build",['js','css','html','watch']);
//gulp.task("default",['build']); //直接运行gulp 默认启动server,会一次执行clean ,[js,css,html,html](中括号里的同步执行),rev ,watch
//可以去了解一下gulpSequence的用法
gulp.task("default",function(cd){
gulpSequence('clean',['js','css','html'],'rev','watch')(cd)
});

值得注意的是:在每个任务的回调函数我们有必要进行返回通知,通知后面的任务当前这个任务执行完啦,可以接着执行下面的任务啦。。。。。。

在这里只是说如何使用(也只是使用了一部分),至于原理没做深入了解。。。

https://github.com/EvalGitHub/angular1_require_gulp

使用gulp 合并压缩打包,实时监控文件,实现本地server的更多相关文章

  1. 关于用gulp合并压缩seaJs模块

    现在很多人都在用seaJs来开发项目,seaJs上手容易,操作简单.但在后期做合并压缩的时候却中了个巨大无比的坑,但坑也总得有人来填.于是花了将近一个星期的时间来填了这坑,现将填坑的一些心得与大家分享 ...

  2. gulp合并压缩

    1.文件合并压缩 var concat = require(‘gulp-concat’); //引用 var uglify = require(‘gulp-uglify’);  接下来,只要conca ...

  3. 使用grunt合并压缩js、css文件

    需要了解的知识: 1.nodejs的安装与命令行使用 2.nodejs安装应用 3.grunt的初步了解 本文已假定读者已经熟悉以上知识. 好,我们继续: 任务1:将src目录下的所有zepto及插件 ...

  4. webpack配置:css文件打包、JS压缩打包和HTML文件发布

    一.CSS文件打包 1.在src下新建css文件,在css文件下新建index.css文件,输入以下代码 body{ color:red; font-size:20px; } 2.css建立好后,需要 ...

  5. grunt 合并压缩js和css文件(二)

    具体node及文件配置请看: grunt 安装使用(一) 要压缩的文件 --src/ ajax.js assets.js touch.js zepto.js 目录结构: dist/ node_modu ...

  6. gulp不压缩打包layui

    从网上下载的layui都是压缩包,如何打包在一个文件且不压缩呢?如下方法: 1.https://gitee.com/sentsin/layui下载源码(本文的为2.4.5版本) 2.安装nodejs( ...

  7. 玩转gulp之压缩打包热重载

    上节上上节我们讲了gulp的sass编译和watch监听,动态加载 这样我们就可以做到,我管我写我的sass然后保存,自动编译,就好像我们在写css一样,这是一个自动化的一大步.我们呱唧呱唧. 我们已 ...

  8. Node.js + gulp 合并静态页模版,文件更新自动热重载。浏览器可预览

    github地址:https://github.com/Liaozhenting/template 使用的是ejs的语法.其实你用什么文件后缀都可以,都是按ejs来解析. 模板文件放在componen ...

  9. flume+sparkStreaming实例 实时监控文件demo

    1,flume所在的节点不和spark同一个集群  v50和 10-15节点 flume在v50里面 flume-agent.conf spark是开的work节点,就是单点计算节点,不涉及到mast ...

随机推荐

  1. Data Guard Wait Events

    This note describes the wait events that monitor the performance of the log transport modes that wer ...

  2. win7 安装express

    1.以管理员身份打开cmd(避免出错) npm install -g express-generator@4 Start the server: npm start 链接,github官网说明 htt ...

  3. 数据仓库建模与ETL的实践

    一.Data仓库的架构 Data仓库(Data Warehouse DW)是为了便于多维分析和多角度展现而将Data按特定的模式进行存储所建立起来的关系型Datcbase,它的Data基于OLTP源S ...

  4. SQL Server 自动化运维系列 - 监控磁盘剩余空间及SQL Server错误日志(Power Shell)

    需求描述 在我们的生产环境中,大部分情况下需要有自己的运维体制,包括自己健康状态的检测等.如果发生异常,需要提前预警的,通知形式一般为发邮件告知. 在所有的自检流程中最基础的一个就是磁盘剩余空间检测. ...

  5. C#阿里云 移动推送 接入

    接入阿里云的 移动推送 SDK,实现在后台直接 发送消息给APP的功能.        ----------------OpenAPI进行推送 2.0高级接口 阿里云配置准备:1.移动app配置:打开 ...

  6. MySQL 5.7 分区表性能下降的案例分析

    转载自:https://mp.weixin.qq.com/s/K3RpSBAIWFwGCIWyfF0QPA 前言:希望通过本文,使MySQL5.7.18的使用者知晓分区表使用中存在的陷阱,避免在该版本 ...

  7. L1-025 正整数A+B

    题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000].稍微有点麻烦的是,输入并不保证是两个正整数. 输入格式: 输入在一行给出A和B,其间以空格分开.问题是A和B不一定是满足 ...

  8. Incremental Method

    「遞增法」是符合電腦運作特性的方法.電腦執行程式,一次只做一個動作,完成了一件事才做下一件事.當一個問題太大太多時,化整為零.一個一個解決吧! 合抱之木,生於毫末:九層之臺,起於累土:千里之行,始於足 ...

  9. magento小常识

    magento后台设置好产品分类及添加产品后前台没有显示出来:以下几个可能: 1.首先检查网店商城的Root Category 以 及跟目录下面的子目录设置是否有误,具体在目录->管理分类-&g ...

  10. SVM核技巧之终极分析

    参考文献: http://www.blogjava.net/zhenandaci/archive/2009/03/01/257237.html http://www.cnblogs.com/jerry ...