Gulp обнаруживает изменения в файлах, которые никогда не изменялись.Иногда бесконечно - PullRequest
0 голосов
/ 11 февраля 2019

Проблема наперед: Работа над этим старым приложением angular 2 на работе занимает вечно, потому что gulp будет взорван либо во время сборки, либо случайно во время разработки gulp перейдет в бесконечный цикл обнаружения изменений, пока он не исчерпает пространство стека.

Предварительная информация: package.json

    "gulp": "3.9.1",
    "gulp-babel": "6.1.2",
    "gulp-banner": "0.1.3",
    "gulp-clean-css": "2.2.0",
    "gulp-concat": "2.6.1",
    "gulp-debug": "3.0.0",
    "gulp-delete-lines": "0.0.7",
    "gulp-eslint": "5.0.0",
    "gulp-footer": "1.0.5",
    "gulp-istanbul": "1.1.1",
    "gulp-less": "3.3.0",
    "gulp-mocha": "3.0.1",
    "gulp-nodemon": "2.2.1",
    "gulp-plumber": "1.1.0",
    "gulp-protractor": "3.0.0",
    "gulp-rename": "1.2.2",
    "gulp-sass": "4.0.1",
    "gulp-uglify": "2.0.0",
    "gulp-watch": "4.3.11",

Я разрабатываю для Windows 10.

Иногда во время команды сборки gulp assets, которая выполняет следующее:

gulp.task('assets', function(done) {
  runSequence(
    'clean',
    'client-copy', 'modules-copy', 'client-stylesheet', 'client-styles', 'client-styles-core',
    'client-build',
    done
  );
});

Вывод на консоль выводит это на задание client-styles-core, даже если эти файлы не изменились.Он говорит, что каждый файл в этом каталоге изменился, я перечисляю только один.

[14:12:59] Finished 'client-styles' after 19 s
[14:12:59] Starting 'client-styles-core'...
[14:12:59] core\sharedModules\ui\components\abc\def.theme.scss was changed
[14:12:59] core\sharedModules\ui\components\abc\xyz.theme.scss was changed

Задача client-styles-core выглядит следующим образом:

'use strict';
var gulp = require('gulp');
var plumber = require('gulp-plumber');
var sass = require('gulp-sass');
var config = require('./config').client;
var banner = require('gulp-banner');
var footer = require('gulp-footer');
var rename = require('gulp-rename');
var merge = require('merge-stream');
var watch = require('gulp-watch');

module.exports = function(singleRun) {
    return function() {
        var fileWatcher = function() {
            var clientWatch = watch([
                './assets/core/modules/**/*.scss'
            ], { read: false, verbose: true });

            clientWatch.on('change', function(fileName) {
                executeTranspile();
            });
        };

        var executeTranspile = function(endCb = function(){}) {

            var themeHead = '@import "assets/css/component";\n' +
                       '@mixin temp { ';
            var themeFooter = '}\n' +
                             '@import "assets/css/light";\n' +
                             '\t.light{ \n' +
                             '\t\t @include temp; \n' +
                             '\t}\n' +
                             '@import "assets/css/dark";\n' +
                             '\t.dark{ \n' +
                             '\t\t @include temp; \n' +
                             '\t}\n';

            var lightSassHeader = "@import './assets/css/light'; \n@import './assets/css/mixins/index.scss'; \n\n";
            var darkSassHeader = "@import './assets/css/dark'; \n@import './assets/css/mixins/index.scss'; \n\n";

            var themeStream = gulp.src(['./assets/core/**/*.theme.scss'])
                .pipe(plumber())
                .pipe(banner(themeHead))
                .pipe(footer(themeFooter));

            var lightStream = gulp.src(['./assets/core/**/*.scss'])
                .pipe(plumber())
                .pipe(banner(lightSassHeader))
                .pipe(sass())
                .pipe(rename(function(opt){
                    opt.basename += '.light';
                    return opt;
                }));

            var darkStream = gulp.src(['./assets/core/**/*.scss'])
                .pipe(plumber())
                .pipe(banner(darkSassHeader))
                .pipe(sass())
                .pipe(rename(function(opt){
                    opt.basename += '.dark';
                    return opt;
                }));

            var destFolder = '/core';

            lightStream.pipe(gulp.dest(config.destination + destFolder));
            darkStream.pipe(gulp.dest(config.destination + destFolder));
            themeStream.pipe(gulp.dest(config.destination + destFolder));


            return merge(lightStream, darkStream, themeStream);
        };

        return executeTranspile(singleRun ? undefined : fileWatcher);
    };
};

Иногда gulp assets будетзапустить все по порядку без проблем.Иногда он запускает все по порядку без проблем, но, скажем, веб-пакет следит за изменениями дважды.Иногда он попадает в задачу client-build и затем взрывается, говоря, что сотни нетронутых .js файлов были изменены.Или, может быть, только один или два файла.Иногда все идет гладко, и я могу развиваться в течение пары часов, прежде чем консоль взрывает меня обнаружением изменений и вылетает из-за переполнения стека.

Это был мой самый последний gulp assets

[14:25:45] Starting 'client-styles-core'...
[14:25:50] Finished 'client-styles-core' after 4.64 s
[14:25:50] Starting 'client-build'...
[14:25:53] javascripts\modules\abc\def.module.js was changed
[14:25:55] javascripts\modules\abc\def.module.js was changed
[14:26:27] webpack:build 33.91s
[14:26:27] webpack is watching for changes
[14:27:09] Finished 'client-build' after 1.3 min
[14:27:09] Finished 'assets' after 2 min
[14:27:09] webpack is watching for changes

Это странно, вышло из строя и, что хуже всего, никогда не меняется, поэтому мне очень трудно понять, что, черт возьми, происходит.Я надеюсь, что кто-то может увидеть этот пост и найти что-то, что кажется ему больным большим пальцем, и, возможно, я смогу взять его и побежать с ним.

Любая помощь приветствуется.

...