Gulp 一次性注射需要非常长的时间

Gulp 一次性注射需要非常长的时间,gulp,gulp-inject,Gulp,Gulp Inject,我有一个问题,我无法找出原因和解决方法,那就是吞咽注射需要很长时间,没有任何理由,没有任何警告或错误,只是需要很长时间才能完成,然后成功完成(您可以看到完成任务大约需要70分钟,有时需要80-120分钟): 我提供了代码,希望找到解决此问题的方法或想法: 注入任务: var path = require('path'); var gulp = require('gulp'); var conf = require('./conf'); var $ = require('gulp-load-pl

我有一个问题,我无法找出原因和解决方法,那就是吞咽注射需要很长时间,没有任何理由,没有任何警告或错误,只是需要很长时间才能完成,然后成功完成(您可以看到完成任务大约需要70分钟,有时需要80-120分钟):

我提供了代码,希望找到解决此问题的方法或想法:

注入任务:

var path = require('path');
var gulp = require('gulp');
var conf = require('./conf');

var $ = require('gulp-load-plugins')();

var wiredep = require('wiredep').stream;
var _ = require('lodash');

var browserSync = require('browser-sync');

gulp.task('inject-reload', ['inject'], function ()
{
    browserSync.reload();
});
gulp.task('inject', ['scripts', 'styles'], function ()
{
    var injectStyles = gulp.src([
        path.join(conf.paths.tmp, '/serve/app/**/*.css'),
        path.join('!' + conf.paths.tmp, '/serve/app/vendor.css')
    ], {read: false});

    var injectScripts = gulp.src([
            path.join(conf.paths.src, '/app/**/*.module.js'),
            path.join(conf.paths.src, '/app/**/*.js'),
            path.join('!' + conf.paths.src, '/app/**/*.spec.js'),
            path.join('!' + conf.paths.src, '/app/**/*.mock.js'),
        ])
        .pipe($.angularFilesort()).on('error', conf.errorHandler('AngularFilesort'));

    var injectOptions = {
        ignorePath  : [conf.paths.src, path.join(conf.paths.tmp, '/serve')],
        addRootSlash: false
    };

    return gulp.src(path.join(conf.paths.src, '/*.html'))
        .pipe($.inject(injectStyles, injectOptions))
        .pipe($.inject(injectScripts, injectOptions))
        .pipe(wiredep(_.extend({}, conf.wiredep)))
        .pipe(gulp.dest(path.join(conf.paths.tmp, '/serve')));
}); 
Conf文件(如果需要):

var gutil = require('gulp-util');

/**
 *  The main paths of your project handle these with care
 */
exports.paths = {
    src : 'src',
    dist: 'dist',
    tmp : '.tmp',
    e2e : 'e2e'
};

/**
 *  Wiredep is the lib which inject bower dependencies in your project
 *  Mainly used to inject script tags in the index.html but also used
 *  to inject css preprocessor deps and js files in karma
 */
exports.wiredep = {
    directory: 'bower_components'
};

/**
 *  Common implementation for an error handler of a Gulp plugin
 */
exports.errorHandler = function (title)
{
    'use strict';

    return function (err)
    {
        gutil.log(gutil.colors.red('[' + title + ']'), err.toString());
        this.emit('end');
    };
};

第一:我在这里学会了倾听,在没有升级到最新版本的情况下,永远不要使用gulp和npm模块

我发现问题与过时和不推荐使用的gulp插件有关,而不是gulp注入本身:

  • gulp useref从1.3到3.0严重过时(更新和迁移)
  • gulp minify css已弃用,替换为gulp cssnano
  • gulp minify html已弃用,替换为gulp htmlmin
我刚刚更新了插件,替换了不推荐的插件,解决了当当的问题

修复后的生成任务:

gulp.task('html', ['inject', 'partials'], function ()
{
    var partialsInjectFile = gulp.src(path.join(conf.paths.tmp, '/partials/templateCacheHtml.js'), {read: false});
    var partialsInjectOptions = {
        starttag    : '<!-- inject:partials -->',
        ignorePath  : path.join(conf.paths.tmp, '/partials'),
        addRootSlash: false
    };

    var htmlFilter = $.filter('*.html', {restore: true});
    var jsFilter = $.filter('**/*.js', {restore: true});
    var cssFilter = $.filter('**/*.css', {restore: true});

    return gulp.src(path.join(conf.paths.tmp, '/serve/*.html'))
        .pipe($.inject(partialsInjectFile, partialsInjectOptions))
        .pipe(jsFilter)
        .pipe($.sourcemaps.init())
        .pipe($.ngAnnotate())
        .pipe($.uglify({preserveComments: $.uglifySaveLicense})).on('error', conf.errorHandler('Uglify'))
        .pipe($.sourcemaps.write('maps'))
        .pipe(jsFilter.restore)
        .pipe(cssFilter)
        .pipe($.sourcemaps.init())
        .pipe($.cssnano())
        .pipe($.sourcemaps.write('maps'))
        .pipe(cssFilter.restore)
        .pipe($.useref())
        .pipe(htmlFilter)
        .pipe($.htmlmin({
            removeComments      : true,
            collapseWhitespace  : true,
            removeAttributeQuotes: true
        }))
        .pipe(htmlFilter.restore)
        .pipe(gulp.dest(path.join(conf.paths.dist, '/')))
        .pipe($.size({
            title    : path.join(conf.paths.dist, '/'),
            showFiles: true
        }));
});
gulp.task('html',['inject','partials',],function()
{
var partialsInjectFile=gulp.src(path.join(conf.path.tmp,'/partials/templateCacheHtml.js'),{read:false});
var partialsInjectOptions={
开始标记:“”,
ignorePath:path.join(conf.path.tmp,“/partials”),
addRootSlash:false
};
var htmlFilter=$.filter('*.html',{restore:true});
var jsFilter=$.filter('***.js',{restore:true});
var cssFilter=$.filter('***.css',{restore:true});
返回gulp.src(path.join(conf.paths.tmp,'/service/*.html'))
.pipe($.inject(partialsInjectFile,partialsInjectOptions))
.pipe(jsFilter)
.pipe($.sourcemaps.init())
.pipe($.ngAnnotate())
.pipe($.uglify({preserveComents:$.uglifySaveLicense})).on('error',conf.errorHandler('uglify'))
.pipe($.sourcemaps.write('maps'))
.pipe(jsFilter.restore)
.管道(cssFilter)
.pipe($.sourcemaps.init())
.pipe($.cssnano())
.pipe($.sourcemaps.write('maps'))
.pipe(cssFilter.restore)
.pipe($.useref())
.管道(htmlFilter)
.pipe($.htmlmin({
removeComments:对,
拼贴空白:对,
RemoveAttribute属性:true
}))
.pipe(htmlFilter.restore)
.pipe(gulp.dest(path.join(conf.paths.dist,“/”))
.管道(美元/尺寸)({
标题:path.join(conf.path.dist,“/”),
showFiles:true
}));
});

首先:我在这里学到了一个技巧,在没有升级到最新版本的情况下,永远不要使用gulp和npm模块

我发现问题与过时和不推荐使用的gulp插件有关,而不是gulp注入本身:

  • gulp useref从1.3到3.0严重过时(更新和迁移)
  • gulp minify css已弃用,替换为gulp cssnano
  • gulp minify html已弃用,替换为gulp htmlmin
我刚刚更新了插件,替换了不推荐的插件,解决了当当的问题

修复后的生成任务:

gulp.task('html', ['inject', 'partials'], function ()
{
    var partialsInjectFile = gulp.src(path.join(conf.paths.tmp, '/partials/templateCacheHtml.js'), {read: false});
    var partialsInjectOptions = {
        starttag    : '<!-- inject:partials -->',
        ignorePath  : path.join(conf.paths.tmp, '/partials'),
        addRootSlash: false
    };

    var htmlFilter = $.filter('*.html', {restore: true});
    var jsFilter = $.filter('**/*.js', {restore: true});
    var cssFilter = $.filter('**/*.css', {restore: true});

    return gulp.src(path.join(conf.paths.tmp, '/serve/*.html'))
        .pipe($.inject(partialsInjectFile, partialsInjectOptions))
        .pipe(jsFilter)
        .pipe($.sourcemaps.init())
        .pipe($.ngAnnotate())
        .pipe($.uglify({preserveComments: $.uglifySaveLicense})).on('error', conf.errorHandler('Uglify'))
        .pipe($.sourcemaps.write('maps'))
        .pipe(jsFilter.restore)
        .pipe(cssFilter)
        .pipe($.sourcemaps.init())
        .pipe($.cssnano())
        .pipe($.sourcemaps.write('maps'))
        .pipe(cssFilter.restore)
        .pipe($.useref())
        .pipe(htmlFilter)
        .pipe($.htmlmin({
            removeComments      : true,
            collapseWhitespace  : true,
            removeAttributeQuotes: true
        }))
        .pipe(htmlFilter.restore)
        .pipe(gulp.dest(path.join(conf.paths.dist, '/')))
        .pipe($.size({
            title    : path.join(conf.paths.dist, '/'),
            showFiles: true
        }));
});
gulp.task('html',['inject','partials',],function()
{
var partialsInjectFile=gulp.src(path.join(conf.path.tmp,'/partials/templateCacheHtml.js'),{read:false});
var partialsInjectOptions={
开始标记:“”,
ignorePath:path.join(conf.path.tmp,“/partials”),
addRootSlash:false
};
var htmlFilter=$.filter('*.html',{restore:true});
var jsFilter=$.filter('***.js',{restore:true});
var cssFilter=$.filter('***.css',{restore:true});
返回gulp.src(path.join(conf.paths.tmp,'/service/*.html'))
.pipe($.inject(partialsInjectFile,partialsInjectOptions))
.pipe(jsFilter)
.pipe($.sourcemaps.init())
.pipe($.ngAnnotate())
.pipe($.uglify({preserveComents:$.uglifySaveLicense})).on('error',conf.errorHandler('uglify'))
.pipe($.sourcemaps.write('maps'))
.pipe(jsFilter.restore)
.管道(cssFilter)
.pipe($.sourcemaps.init())
.pipe($.cssnano())
.pipe($.sourcemaps.write('maps'))
.pipe(cssFilter.restore)
.pipe($.useref())
.管道(htmlFilter)
.pipe($.htmlmin({
removeComments:对,
拼贴空白:对,
RemoveAttribute属性:true
}))
.pipe(htmlFilter.restore)
.pipe(gulp.dest(path.join(conf.paths.dist,“/”))
.管道(美元/尺寸)({
标题:path.join(conf.path.dist,“/”),
showFiles:true
}));
});

认真地说。这就是答案。我的构建时间从7.3分钟变为6秒。认真地说。这就是答案。我的构建时间从7.3分钟变为6秒。