7

アプリケーション用に 3 つの縮小バンドルを作成しています。これを行うには、ミニファイとバンドルの 2 つのタスクがあります。Miniify は bundle に依存しています。minify を実行すると、両方のタスクがエラーなしで実行されます。バンドルは作成されますが、縮小されたファイルは作成されません。バンドルへの依存関係を削除すると、縮小化を単独で実行でき、縮小化されたファイルが正常に作成されます。これにより、縮小タスクがトリガーされたときにファイルが使用されている可能性があると思います(バンドルが終了していないためですか?)。ファイルの準備が完了するまで待機させるにはどうすればよいですか? ストリームを渡すことはできますか? それとも、これらを 1 つのタスクに組み合わせますか? それらが現在単一のタスクではない理由は、バンドルごとに 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);
    });
}
4

1 に答える 1

3

バンドル タスクが使用するのと同じソース ファイルを縮小タスクで使用します。'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);
    });
}
于 2015-09-18T18:24:02.620 に答える