var gulp = require('gulp');
var cleanCSS = require('gulp-clean-css');
var concatCss = require('gulp-concat-css');
var uglify = require('gulp-uglify');
var concat = require('gulp-concat');
var del = require('del');
var gutil = require('gulp-util'); //压缩的临时文件保存到storage, gitignore这些文件
var clean_css_path = 'storage/gulp/clean_css'; //压缩css文件保存路径
var target_css_path = 'public/gulp/css'; //最终生成的最小化css文件保存路径
var clean_js_path = 'storage/gulp/clean_js'; //压缩js文件保存路径
var target_js_path = 'public/gulp/js'; //最终生成的最小化js文件保存路径 //为数组每一个元素加上前缀并返回修改后的数组
//这个前缀是相对于项目根目录的目录前缀
Array.prototype.add_prefix = function (prefix) {
return this.map(function (path) {
return prefix + path;
});
}; //需要合并压缩的css
var css_to_clean = [
'js/jquery-ui/css/no-theme/jquery-ui-1.10.3.custom.min.css',
'css/font-icons/entypo/css/entypo.css',
'css/bootstrap.css',
'css/neon-core.css',
'css/neon-theme.css',
'css/neon-forms.css',
'css/custom.css',
'js/datatables/datatables.min.css',
'js/dropzone/dropzone.css'
].add_prefix('public/static/neon-res/')
.concat([
'fancybox/jquery.fancybox.css',
'fancybox/helpers/jquery.fancybox-buttons.css',
'fancybox/helpers/jquery.fancybox-thumbs.css'
].add_prefix('public/static/'))
.concat('public/admin/css/neon_common.css');//自定义的css //需要合并压缩的js
var js_to_clean = [
//登录界面才有的js
//下面合并js使用slice(2)去掉
'jquery.validate.min.js',
'neon-login.js', 'jquery-1.11.3.min.js',
'gsap/TweenMax.min.js',
'jquery-ui/js/jquery-ui-1.10.3.minimal.min.js', 'bootstrap.js',
'joinable.js',
'resizeable.js',
'neon-api.js', 'fileinput.js',
'dropzone.js',
'neon-chat.js',
'neon-custom.js',
'neon-demo.js'
].add_prefix('public/static/neon-res/js/')
.concat([
//自定义的js
'public/admin/js/common.js',
'public/admin/js/kollway_ot.js'
])
.concat([
'public/static/uploadify/jquery.uploadify.min.js',
'public/static/H5FileUploader.js'
])
.concat([
'jquery.fancybox.pack.js',
'helpers/jquery.fancybox-buttons.js',
'helpers/jquery.fancybox-thumbs.js'
].add_prefix('public/static/fancybox/')); //压缩全部css, 直接全部合并之后好像漏掉一些css, 先压缩再合并
gulp.task('clean-css', function () {
return gulp.src(css_to_clean)
.pipe(cleanCSS())
.pipe(gulp.dest(clean_css_path));
}); var clean_css_callback = function () {
var temp_array = css_to_clean.map(function (path) {
//只获取文件名
return clean_css_path + '/' + path.split('/').pop();
});
return gulp.src(temp_array)
.pipe(concatCss('all.min.css', {basedir: target_css_path}))
.pipe(cleanCSS())
.pipe(gulp.dest(target_css_path));
};
gulp.task('css', ['clean-css'], clean_css_callback); //js
//压缩所有js
gulp.task('clean-js', function () {
return gulp.src(js_to_clean)
.pipe(uglify())
.pipe(gulp.dest(clean_js_path));
}); var clean_js_callback = function () {
//slice(2), 去掉登录界面的两个
var temp_array = js_to_clean.slice(2).map(function (path) {
return clean_js_path + '/' + path.split('/').pop();
});
return gulp.src(temp_array)
.pipe(concat('all.min.js', {basedir: target_js_path}))
.pipe(gulp.dest(target_js_path));
};
gulp.task('js', ['clean-js'], clean_js_callback); //清理临时文件, 需要的话清除, 使用gulp clean命令
gulp.task('clean', function () {
del([
clean_css_path + '/' + '*.css',
clean_js_path + '/' + '*.js'
]);
}); //合并登陆页所需css
gulp.task('merge-login-css', ['clean-css'], function () {
return gulp.src([
'jquery-ui-1.10.3.custom.min.css',
'entypo.css',
'bootstrap.css', 'neon-core.css',
'neon-theme.css',
'neon-forms.css',
'custom.css'
].map(function (path) {
return clean_css_path + '/' + path;
})).pipe(concatCss('login.min.css'), {basedir: target_css_path})
.pipe(cleanCSS())
.pipe(gulp.dest(target_css_path))
}); //合并登陆页所需js
gulp.task('merge-login-js', ['clean-js'], function () {
return gulp.src([
'jquery-1.11.3.min.js',
'TweenMax.min.js',
'jquery-ui-1.10.3.minimal.min.js', 'bootstrap.js',
'joinable.js',
'resizeable.js',
'neon-api.js', 'jquery.validate.min.js',
'neon-login.js',
'neon-custom.js',
'neon-demo.js'
].map(function (path) {
return clean_js_path + '/' + path
}))
.pipe(concat('login.min.js', {basedir: target_js_path}))
.pipe(gulp.dest(target_js_path));
}); //登录页面的css、js和base的不一样, 独立生成, 先清除缓存文件
//一般不需要更改
gulp.task('login', ['merge-login-css', 'merge-login-js']); //如果只是改变自定义的css、js, 只压缩自定义的css、js
//前提是之前已经压缩过其他文件, 并且没有删除
//压缩自定义css
gulp.task('clean-custom-css', function () {
return gulp.src('public/admin/css/neon_common.css')
.pipe(cleanCSS())
.pipe(gulp.dest(clean_css_path));
});
//压缩自定义js
gulp.task('clean-custom-js', function () {
return gulp.src([
'public/admin/js/common.js',
'public/admin/js/kollway_ot.js'
]).pipe(uglify()).pipe(gulp.dest(clean_js_path));
}); //如果之前已经用过gulp生成所有中间压缩文件
//修改了自定义的几个文件之后可以直接使用gulp custom利用缓存文件生成新的压缩文件
gulp.task('cache-clean-css', ['clean-custom-css'], clean_css_callback);
gulp.task('cache-clean-js', ['clean-custom-js'], clean_js_callback);
gulp.task('custom', ['cache-clean-css', 'cache-clean-js']); gulp.task('default', ['css', 'js']);

使用gulp进行css、js压缩的更多相关文章

  1. gulp之css,js压缩合并加密替换

    为了防止客户端的静态资源缓存,我们需要每次更新css或js的时候,通过md5或时间戳等方式重新命名静态资源.让客户端可以重新请求资源,而不是从缓存里取.然后html模板里的src也要做相应的修改.当然 ...

  2. gulp为css,js添加版本号

    由于cdn缓存,更改样式后会有一段时间不生效,解决方法就是给css,js加上版本号效果如下: 1.安装gulp插件 npm install --save-dev gulp-rev (version:9 ...

  3. ASP.NET MVC 中CSS JS压缩合并 功能的使用方法

    通过压缩合并js文件和css文件,可以减少 服务器的响应 次数和 流量,可以大大减小服务器的压力,对网站优化有比较明显的帮助!压缩合并 css 文件和js文件是网站优化的一个 比较常用的方法. ASP ...

  4. 【转】asp.net mvc css/js压缩合并 --- combres

    转自:http://www.cnblogs.com/zxktxj/archive/2012/05/30/2526246.html NuGet   网站:http://nuget.codeplex.co ...

  5. maven css/js 压缩配置

    <plugin>               <groupId>net.alchim31.maven</groupId>               <art ...

  6. gulp做简单的js压缩

    安装工具 全局安装npm install --global gulp 项目的依赖安装npm install --save-dev gulp npm install --save-dev gulp-re ...

  7. gulp自动刷新和css、js压缩

    之前搭建过Grunt,但是用起来有点繁琐,后来有人跟我说gulp更多简单.所以今天又搭建一个gulp.在使用gulp前应该有nodeJs环境,安装完nodejs后,就可以开始gulp的搭建了. 先新建 ...

  8. 运用Gulp压缩文件编译文件。包括css js html image

    安装node.js  npm  以及安装gulp等方法我就不在这里赘述了. 接下里我主要介绍的是Gulpfile文件里面的配置该如何书写. var gulp = require('gulp');//引 ...

  9. Gulp实现css、js、图片的压缩以及css、js文件的MD5命名

    目前做代码压缩合并的工具有很多,诸如gulp,webpack,grunt等等,可以说这些项目构建工具的功能非常之强大:图片压缩.图片转base64.css和js的压缩以及合并,文件的md5重命名 -- ...

  10. gulp插件构建项目 压缩js、css、image、zip、web服务、跨域等插件

    推荐一个很好文: https://github.com/lin-xin/blog/issues/2 匹配符 *.**.!.{} gulp.src('./js/*.js') // * 匹配js文件夹下所 ...

随机推荐

  1. Teaching Machines to Understand Us 让机器理解我们 之一 引言

    Teaching Machines to Understand Us   By Tom Simonite  MIT Technology Review Vol.118 No.5 2015 让机器理解我 ...

  2. Markdown分级语法手册

    目录 前言(可以不看) 基本语法(18) 1. 标题:# 2. 无序列表:- 3. 有序列表:1. 4. 斜体:* 5. 粗体:** 6. 加粗斜体:*** 7. 删除线:~~ 8. 分隔线:--- ...

  3. Python操作摄像头

    实践环境: 操作系统:Windows 7(X64) Python版本:python-2.7.13.msi 使用插件:pygame-1.9.1.win32-py2.7.msi 软件下载: python- ...

  4. Shell脚本初学习

    第一个shell程序运行,教程来自:http://jingyan.baidu.com/article/8cdccae947f83e315413cd05.html 代码如下: #!/bin/sh tou ...

  5. 《C》指针

    储存单元: 不同类型的数据所占用的字节不同,上面一个长方形格子表示4个字节 变量: 变量的值,就是存储的内容.变量的名就相当于地址的名.根据变量类型分配空间:通过变量名引用变量的值,程序经过编译将变量 ...

  6. 【并查集】 不相交集合 - 并查集 教程(文章作者:Slyar)

    最近写了一个多星期的并查集,一瞬间贴出这么多解题报告,我想关于并查集的应用先告一段落吧,先总结一下. 在网上看到一篇关于并查集比较好的教程(姑且允许我这么说吧),不转过来是在可惜.献给爱学习的你 文章 ...

  7. Eclipse 如何安装反编译插件

    安装反编译插件 1.Help——Eclipse Marketplace 2.输入 Decompiler 搜索并安装此插件 3.根据提示无脑下一步,安装好,重启后(如果还是无法编译,需要把默认打开cla ...

  8. <问吧>调查问卷心得体会

    <问吧>调查问卷心得与体会 在这之前,我们已经组成了一个六个人的小团队---“走廊奔跑队”,我们这次做的这个项目的名称是:问吧.在项目实施之前,我们必做的一步就是需求分析,目的就是充分了解 ...

  9. 【Leetcode】725. Split Linked List in Parts

    Given a (singly) linked list with head node root, write a function to split the linked list into k c ...

  10. mybatis update数据时无异常但没更新成功;update异常时如数据超出大小限制,造成死锁

    没更新的问题原因: sqlSession.commit(); 没执行commit,但官方文档里有这样的描述:“默认情况下 MyBatis 不会自动提交事务,除非它侦测到有插入.更新或删除操作改变了数据 ...