Проблема наперед: Работа над этим старым приложением 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
Это странно, вышло из строя и, что хуже всего, никогда не меняется, поэтому мне очень трудно понять, что, черт возьми, происходит.Я надеюсь, что кто-то может увидеть этот пост и найти что-то, что кажется ему больным большим пальцем, и, возможно, я смогу взять его и побежать с ним.
Любая помощь приветствуется.