Пакет Gulp, затем минимизация

Я создаю 3 мини-пакета для своего приложения. У меня есть 2 задачи для этого: минимизировать и связать. Minify зависит от пакета. Если я запускаю minify, обе задачи выполняются без ошибок. Пакеты создаются, а минифицированные файлы — нет. Если я уберу зависимость от пакета, я смогу запустить minify сам по себе, и минифицированные файлы будут успешно созданы. Это наводит меня на мысль, что, возможно, файлы используются, когда запускается задача минимизации (потому что сборка еще не завершена?). Как заставить его ждать, пока файлы не будут полностью готовы? Могу ли я пройти поток? Или, может быть, объединить их в одну задачу? Причина, по которой они в настоящее время не являются отдельной задачей, заключается в том, что они выводят 2 файла на пакет (неминифицированный и минимизированный).

var outFolder = __dirname + '\\Scripts\\dist';
var appBundles = [
    { scripts: ['Scripts/Common/**/*.js'], output: 'eStore.common.js' },
    { scripts: ['Scripts/Checkout/**/*.js'], output: 'eStore.checkout.js' },
    { scripts: ['Scripts/ProductDetail/**/*.js'], output: 'eStore.product.js' }
];

gulp.task('bundle', bundle);
gulp.task('minify', ['bundle'], minify);  // this one doesn't work
gulp.task('minifyOnly', minify);          // this one works

function bundle() {
    appBundles.forEach(function (appBundle) {
        gulp.src(appBundle.scripts)
            .pipe(concat(appBundle.output))
            .pipe(sourcemaps.init())
            .pipe(sourcemaps.write(outFolder + '\\maps'))
            .pipe(gulp.dest(outFolder))
            .on('error', errorHandler);
    });
}

function minify() {
    appBundles.forEach(function(appBundle) {
        var bundleSrc = outFolder + '\\' + appBundle.output;
        gulp.src(bundleSrc)
            .pipe(rename({ extname: '.min.js' }))
            .pipe(uglify())
            .pipe(gulp.dest(outFolder))
            .on('error', errorHandler);
    });
}

person Ryan Langton    schedule 18.09.2015    source источник


Ответы (1)


Пусть задача минимизации использует те же исходные файлы, что и задача пакета. 'concat' будет использоваться в обеих задачах. Таким образом, минимизация не зависит от вывода задачи пакета.

function minify() {
    appBundles.forEach(function (appBundle) {
        console.log('Creating minified bundle for: ' + appBundle.output);
        gulp.src(appBundle.scripts)
            .pipe(concat(appBundle.output))
            .pipe(rename({ extname: '.min.js' }))
            .pipe(uglify())
            .pipe(gulp.dest(outFolder))
            .on('error', errorHandler);
    });
}

function bundle() {
    appBundles.forEach(function (appBundle) {
        console.log('Creating bundle and sourcemaps: ' + appBundle.output);
        gulp.src(appBundle.scripts)
            .pipe(concat(appBundle.output))
            .pipe(sourcemaps.init())
            .pipe(sourcemaps.write(outFolder + '\\maps'))
            .pipe(gulp.dest(outFolder))
            .on('error', errorHandler);
    });
}
person Ryan Langton    schedule 18.09.2015