У меня есть этот gulpfile
const gulp = require('gulp')
const tap = require('gulp-tap')
const browserify = require('browserify')
const babelify = require('babelify')
const sass = require('gulp-sass')
sass.compiler = require('node-sass')
const path = {
scripts: {
src: 'scripts/*.js',
watch: 'scripts/**/*.js',
dest: '../public/scripts',
},
styles: {
src: 'styles/*.scss',
watch: 'styles/**/*.scss',
dest: '../public/styles',
},
}
const watchOptions = {
ignoreInitial: false,
}
function js() {
return gulp.src(path.scripts.src)
.pipe(tap((file) => {
file.contents = browserify(file.path, { debug: true })
.transform(babelify)
.bundle()
}))
.pipe(gulp.dest(path.scripts.dest))
}
function styles() {
return gulp.src(path.styles.src)
.pipe(sass({ outputStyle: 'compressed' }))
.pipe(gulp.dest(path.styles.dest))
}
module.exports.js = js
module.exports.styles = styles
module.exports.dev = function () {
gulp.watch(path.scripts.watch, watchOptions, js)
gulp.watch(path.styles.watch, watchOptions, styles)
}
module.exports.default = gulp.parallel(js, styles)
Файлы непосредственно в каталогах scripts
и styles
являются точками входа, а файлы в подкаталогах (например, scripts/helpers/fib.js
и styles/variables/_colors.scss
) - это модули, которые Я хочу импортировать из точек входа.
Проблема заключается в том, что когда я меняю и сохраняю любой модуль в подкаталогах, gulp watch запускает указанную задачу, но это не влияет на выходной файл, пока я не перезаписываю точку входа. Например, если у меня есть scripts/main.js
, который выглядит следующим образом:
import './helpers/a.js';
и scripts/helpers/a.js
файл выглядит так:
alert(1);
, а затем измените scripts/helpers/a.js
на
alert(2)
gulp выполняет задачу, веб-сайт по-прежнему предупреждает 1, но когда я просто сохраняю scripts/main.js
даже без изменения содержимого и обновляю страницу sh, он оповещает 2.
Редактировать: изменение аргумента src
на path.scripts.watch
не помогает