文件修改后Gulp任务未执行问题求助
Gulp文件变化检测到但任务不执行的解决办法
问题排查与修复点:
Sass编译逻辑矛盾
你的style任务里,源文件是.css后缀,但却调用了sass()编译管道——Sass编译器只处理.scss/.sass文件,直接喂CSS文件会导致任务静默失败(无语法错误但无实际编译动作),后续的autoprefixer、cleanCSS等步骤也无法正常执行。
解决:如果用Sass开发,把源路径改成你的Sass文件目录(比如public/assets/scss/*.scss);如果是纯CSS开发,直接删掉.pipe(sass().on('error', sass.logError))这一行。BrowserSync与Gulp Watch的监听冲突
你在browserSync.init里配置了files参数监听CSS/JS文件,这会让BrowserSync自行监听并刷新页面,但和你后面用gulp.watch绑定任务的逻辑重复,导致Gulp的任务触发被覆盖。
解决:删掉browserSync.init里的files配置项,让Gulp的watch来触发任务,再通过任务里的browserSync.stream()注入变化。
修改后的完整代码:
const gulp = require('gulp'); const sass = require('gulp-sass')(require('sass')); const autoprefixer = require('gulp-autoprefixer'); const browserSync = require('browser-sync').create(); const cleanCSS = require('gulp-clean-css'); const concat = require('gulp-concat'); const babel = require('gulp-babel'); const uglify = require('gulp-uglify'); // 假设你用Sass开发,这里改成scss源文件路径;如果是纯CSS,删掉sass编译管道 function style() { return gulp .src('public/assets/scss/*.scss') // 改为Sass文件路径 .pipe(sass().on('error', sass.logError)) // 仅保留Sass编译逻辑 .pipe(autoprefixer()) .pipe(cleanCSS()) .pipe(concat('styles.css')) .pipe(gulp.dest('public/source/css')) .pipe(browserSync.stream()); } function scripts() { return gulp .src('public/assets/js/*.js') .pipe(babel({ presets: ['@babel/env'] })) .pipe(uglify()) .pipe(concat('scripts.min.js')) .pipe(gulp.dest('public/source/js')) .pipe(browserSync.stream()); } function watch() { browserSync.init({ proxy: "gif-ddev.ddev.site", open: true, // 删掉files配置,避免冲突 }); gulp.watch('public/assets/scss/*.scss', style); // 对应修改后的源路径 gulp.watch('public/assets/js/*.js', scripts); gulp.watch(['templates/*.html', 'templates/**/*.twig']).on('change', browserSync.reload); } exports.style = style; exports.scripts = scripts; exports.watch = watch;
验证步骤:
- 先手动执行
gulp style和gulp scripts,确认控制台没有报错,目标目录能生成编译后的文件 - 再运行
gulp watch,修改对应的Sass/JS文件,看控制台是否输出任务执行日志,浏览器是否同步更新
内容的提问来源于stack exchange,提问作者JMKelley
相关产品推荐
相关产品推荐

