var rjs = require('gulp-requirejs');
var minifycss = require('gulp-minify-css'),// CSS压缩
uglify = require('gulp-uglify'),// js压缩
concat = require('gulp-concat'),// 合并文件
rename = require('gulp-rename'),// 重命名
clean = require('gulp-clean');//清空文件夹
var gulp = require('gulp'),
less = require('gulp-less');
notify = require('gulp-notify'),
plumber = require('gulp-plumber');
browserSync = require('browser-sync').create(),
reload = browserSync.reload;
var cssfiles = [
'src/css/base.css',
'src/css/index.css'
];
gulp.task('css-index', function() {
gulp.src(cssfiles)
.pipe(concat('index.merge.min.css'))
.pipe(minifycss())
.pipe(gulp.dest('src/dist/css/'));
});
gulp.task('js-index', function() {
rjs({
baseUrl: "src/js",
paths: {
'jquery': 'lib/bower_components/jquery/dist/jquery.min'
},
name: "build",
out: "index.merge.min.js"
})
.pipe(uglify())
.pipe(gulp.dest("src/dist/js"));
gulp.src("src/js/require2.1.21.js")
.pipe(uglify())
.pipe(rename({
suffix: '.min'
}))
.pipe(gulp.dest('src/dist/js'));
});
gulp.task('serve', ['Less'], function() {
browserSync.init({
server: "./src"
});
gulp.watch("src/**/*.less", ['Less']);
gulp.watch("src/*.html").on('change', reload);
});
gulp.task('Less', function() {
return gulp.src(['src/less/*.less','!src/less/extend/{reset,test}.less'])
.pipe(plumber({errorHandler: notify.onError('Error: <%= error.message %>')}))
.pipe(less())
.pipe(gulp.dest("src/css"))
.pipe(reload({stream: true}));
});
gulp.task('default-old', ['serve']);
gulp.task('watch', ['js-index', 'css-index'], function() {
browserSync.reload();
});
gulp.task('localserver',['serve'],function() {
gulp.watch(['src/**/*.css', 'src/**/*.js', 'src/**/*.html'], ['watch']);
});
gulp.task('default', ['css-index', 'js-index']);
要实现的效果就是我修改less能输出css,同时css或者js变化了,选定的文件要能执行压缩的方法。
备注:js-index:压缩js;css-index:压缩css;serve:监听less文件变化;watch:监听css|js|html的变化
步骤:
1.启动localserver方法
2.修过某个less文件
3.页面效果改变了
4.每ctrl+s一次
5.webstorm控制台一直提示starting.."watch"方法在执行
问题:
样式加载,有时成功,有时失败。每次执行方法后页面一直在重载。
不知道是什么原因。
哪位大神能帮我改良下我的代码,感激不尽。
没敢大改,稍微梳理一下,因为
gulp
好久不用了,你自己试试,应该可以用:补充:
首先讲下为什么要
merge
,merge
的目的是将两个stream
合并,处理最终的结束事件,这样依赖js-index
的其他任务才能正确处理接下来的任务。否则可能造成watch
的死循环。再说为什么我加了
merge
也不工作,这是因为gulp-requirejs
自己的bug, 看这里:Does not validly close stream,并且作者长时期未响应群众号召,拒绝修复此bug。所以我个人建议这里直接使用r.js
,不要再用gulp-requirejs
了