今天不讲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. 最应该注意的Oracle版本之一

    最近以来,两个用户的库接连出现问题,经过查阅资料和分析,确定为数据库bug所致,其实,早在很久前,也遭遇过这个版本的类似bug,当时似乎还惊动了原厂的技术人员,后来确定为这个版本的bug,这个版本就是 ...

  2. ShiroFilterFactoryBean 处理拦截资源文件问题(Shiro权限管理)

    一.需要定义ShiroFilterFactoryBean()方法,而ShiroFilterFactoryBean.class是实现了FactoryBean和BeanPostProcessor接口: 1 ...

  3. 自定义div 拖动。键盘上下左右键移动,ctrl+Q控制是否可以移动,ctrl+回车,返回初始状态

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  4. visual Studio里面的代码前面多出好多小点应该怎么设置

    如果是vs中前面绿色的点的话你试试 ctrl + R 然后 ctrl + W 试试看能不能去掉

  5. tensorflow 模型保存后的加载路径问题

    import tensorflow as tf #保存模型 saver = tf.train.Saver() saver.save(sess, "e://code//python//test ...

  6. ACID测试标准

    缩写ACID代表原子性(atomicity).一致性(consistency).孤立性(isolation).持久性(duration) 通过了ACID测试的事物在多线程.并行处理或多用户环境中就是安 ...

  7. Swift网络封装库Moya中文手册之Endpoints

    Endpoints Endpoint是一种半私有的数据结构,Moya用来解释网络请求的根本构成.一个endpoint储存了以下数据: The URL. The HTTP method (GET,POS ...

  8. rim

    “也许我们需要一些药物了”卡拉米走回他的研究室 不去看他最好的朋友的尸体. 过了今晚,他的血肉会被工虫分解. 播种机会犁过他的骨殖,种下土豆与甜菜. 索斯蹲下,不禁思考 生与死在这里太过平常 这是他们 ...

  9. 生成banner的网站

    http://patorjk.com/software/taag 例如: .__ .__ .__ .__ .___ | |__ ____ | | | | ______ _ _____________| ...

  10. TwoSum:两数相加得0

    在一个不重复的数组中,统计有多少组两个元素相加得0. 这里使用三种方式实现,并统计他们各自花费的时间: import java.util.Arrays; import java.util.HashMa ...