使用gulp进行css、js压缩
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压缩的更多相关文章
- gulp之css,js压缩合并加密替换
为了防止客户端的静态资源缓存,我们需要每次更新css或js的时候,通过md5或时间戳等方式重新命名静态资源.让客户端可以重新请求资源,而不是从缓存里取.然后html模板里的src也要做相应的修改.当然 ...
- gulp为css,js添加版本号
由于cdn缓存,更改样式后会有一段时间不生效,解决方法就是给css,js加上版本号效果如下: 1.安装gulp插件 npm install --save-dev gulp-rev (version:9 ...
- ASP.NET MVC 中CSS JS压缩合并 功能的使用方法
通过压缩合并js文件和css文件,可以减少 服务器的响应 次数和 流量,可以大大减小服务器的压力,对网站优化有比较明显的帮助!压缩合并 css 文件和js文件是网站优化的一个 比较常用的方法. ASP ...
- 【转】asp.net mvc css/js压缩合并 --- combres
转自:http://www.cnblogs.com/zxktxj/archive/2012/05/30/2526246.html NuGet 网站:http://nuget.codeplex.co ...
- maven css/js 压缩配置
<plugin> <groupId>net.alchim31.maven</groupId> <art ...
- gulp做简单的js压缩
安装工具 全局安装npm install --global gulp 项目的依赖安装npm install --save-dev gulp npm install --save-dev gulp-re ...
- gulp自动刷新和css、js压缩
之前搭建过Grunt,但是用起来有点繁琐,后来有人跟我说gulp更多简单.所以今天又搭建一个gulp.在使用gulp前应该有nodeJs环境,安装完nodejs后,就可以开始gulp的搭建了. 先新建 ...
- 运用Gulp压缩文件编译文件。包括css js html image
安装node.js npm 以及安装gulp等方法我就不在这里赘述了. 接下里我主要介绍的是Gulpfile文件里面的配置该如何书写. var gulp = require('gulp');//引 ...
- Gulp实现css、js、图片的压缩以及css、js文件的MD5命名
目前做代码压缩合并的工具有很多,诸如gulp,webpack,grunt等等,可以说这些项目构建工具的功能非常之强大:图片压缩.图片转base64.css和js的压缩以及合并,文件的md5重命名 -- ...
- gulp插件构建项目 压缩js、css、image、zip、web服务、跨域等插件
推荐一个很好文: https://github.com/lin-xin/blog/issues/2 匹配符 *.**.!.{} gulp.src('./js/*.js') // * 匹配js文件夹下所 ...
随机推荐
- 高可用Kubernetes集群-11. 部署kube-dns
参考文档: Github介绍:https://github.com/kubernetes/dns Github yaml文件:https://github.com/kubernetes/kuberne ...
- 【python 3.6】如何将list存入txt后,再读出list
今天遇到一个需求,就是将一个list文件读取后,存入一个txt配置文件.存入时,发现list文件无法直接存入,必须转为str模式. 但在读取txt时,就无法恢复成list类型来读取了(准确地说,即使强 ...
- ES6的新特性(18)——async 函数
async 函数 含义 ES2017 标准引入了 async 函数,使得异步操作变得更加方便. async 函数是什么?一句话,它就是 Generator 函数的语法糖. 前文有一个 Generato ...
- Beta阶段第二次网络会议
Beta阶段第二次网络会议 第一次会议问题解决情况 画面问题已经解决,游戏提示信息已加入完成 不同情况下背景已加入完成,但细节部分仍需要进行调整 科技树添加完成,权限修改完成,还存在部分细节调整 AI ...
- iOS- 指压即达,如何集成iOS9里的3D Touch
1.前言 随着6S的到来,3DTouch被各大热门APP迅速普及,博主亲自体验后,发现使用便捷性大幅提高,随后自己照着文档,写了个Demo出来,分享给大家,希望能对有需要的朋友提供有一些帮助. 2 ...
- jQuery之_元素滚动
对应的知识点铺垫,但是有一个很重要的问题就是兼容IE和chorme的 1. scrollTop(): 读取/设置滚动条的Y坐标2. $(document.body).scrollTop()+$(doc ...
- QSet使用及Qt自定义类型使用QHash等算法
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSet使用及Qt自定义类型使用QHash等算法 本文地址:http://techie ...
- Maven的setting配置文件
一.Maven的setting配置文件 和 在Eclipse中对Maven的正确配置. 1.Maven的配置文件(Maven的安装目录/conf/settings.xml ) 和 Maven仓库下(默 ...
- 如何让TEdit在获取输入焦点后selectAll?
关于网友提出的“ 如何让TEdit在获取输入焦点后selectAll?”问题疑问,本网通过在网上对“ 如何让TEdit在获取输入焦点后selectAll?”有关的相关答案进行了整理,供用户进行参考,详 ...
- 【loj6342】跳一跳 期望dp
题目描述 一个人从 $1$ 开始向 $n$ 跳,在 $i$ 时会等概率跳到 $i,i+1,...,n$ 之一.求从 $1$ 跳到 $n$ 的期望步数. $n\le 10^7$ . 题解 期望dp傻逼题 ...