我有一个gulpfile.js来编译我的sass和javascript。在文件的底部,我有一个任务,可以监视任何sass或javascript文件中的更改:
// Load plugins
var gulp = require('gulp'),
sass = require('gulp-ruby-sass'),
autoprefixer = require('gulp-autoprefixer'),
minifycss = require('gulp-minify-css'),
jshint = require('gulp-jshint'),
uglify = require('gulp-uglify'),
imagemin = require('gulp-imagemin'),
rename = require('gulp-rename'),
clean = require('gulp-clean'),
concat = require('gulp-concat'),
cache = require('gulp-cache'),
livereload = require('gulp-livereload');
// Styles
gulp.task('styles', function() {
return gulp.src('sass/**/*.scss')
.pipe(sass({ style: 'expanded', }))
.pipe(autoprefixer('last 2 version', 'safari 5', 'ie 8', 'ie 9', 'opera 12.1', 'ios 6', 'android 4'))
.pipe(gulp.dest('web'))
.pipe(rename({ suffix: '.min' }))
.pipe(minifycss())
.pipe(gulp.dest('web'));
});
// Scripts
gulp.task('scripts', function() {
return gulp.src('js/**/*.js')
.pipe(jshint('node_modules/gulp-jshint/.jshintrc'))
.pipe(jshint.reporter('default'))
.pipe(concat('main.js'))
.pipe(gulp.dest('web'))
.pipe(rename({ suffix: '.min' }))
.pipe(uglify())
.pipe(gulp.dest('web'));
});
// Images
gulp.task('images', function() {
return gulp.src('img/**/*')
.pipe(cache(imagemin({ optimizationLevel: 3, progressive: true, interlaced: true })))
.pipe(gulp.dest('web'));
});
// Clean
gulp.task('clean', function() {
return gulp.src(['web'], {read: false})
.pipe(clean());
});
// Default task
gulp.task('default', ['clean'], function() {
gulp.start('styles', 'scripts', 'images');
});
// Start livereload
gulp.task('start-livereload', function () {
server.listen(35729, function (err) {
if (err) {
return console.log(err);
}
});
});
// Watch
gulp.task('dev', ['start-livereload'], function() {
console.log('running');
// Watch .scss files
gulp.watch('sass/**/*.scss', {mode: 'poll'}, ['styles']);
// Watch .js files
gulp.watch('js/**/*.js', {mode: 'poll'}, ['scripts']);
// Watch image files
gulp.watch('img/**/*', {mode: 'poll'}, ['images']);
// Create LiveReload server
var server = livereload();
// Watch any files in dist/, reload on change
gulp.watch(['web/**']).on('change', function(file) {
server.changed(file.path);
});
});
当我在终端中运行gulp dev
并更改sass文件时,sass编译器和javascript编译器都会运行。当我更改javascript文件时会发生同样的事情。
如何更改它以便我只在更改sass文件时编译Sass并且只在更改javascript文件时编译javascript?
答案 0 :(得分:1)
您是否注意到,您在源 AND 目标目录中查看文件更改?因此,也许,如果更改源并进行编译,则会触及目标目录。这将继承目标目录的监视任务。
另外,您在styles
和scripts
任务中设置目的地两次:
.pipe(gulp.dest('web'));
最诚挚的问候。
答案 1 :(得分:0)
我在这里写下我的经历,也许可以帮助别人。
我将Dropbox用于我的项目并在那里工作。当Dropbox打开时,任务会运行两次,因为Dropbox会检测到文件更改并执行某些操作,从而再次触发任务。