Просматривайте и перекомпилируйте импортированные файлы - PullRequest
0 голосов
/ 29 марта 2020

У меня есть этот 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 не помогает

...