2

すでに処理された画像の縮小、サイズ変更、名前変更を回避しようとしましたが、「gulp-changed」を追加しても何も変わりませんでした。すべてのファイルが毎回処理されます。代わりに「gulp-newer」を試しましたが、まだ運がありません。

後になって、gulp-rename を惜しまなければ、gulp-changed が正常に動作することがわかりました。タスクに gulp-rename を使用すると、そうではありません。しかし、とにかくgulp-renameが必要です...

var gulp        = require('gulp');
var changed     = require('gulp-changed');
var imagemin    = require('gulp-imagemin');
var pngquant    = require('imagemin-pngquant');
var imageResize = require('gulp-image-resize');
var rename      = require('gulp-rename');

var img_src = ['_img/**/*.jpg', '_img/**/*.png'];
var img_dest = '_site/img';

gulp.task('resize-xl', function () {
    return gulp.src(img_src)
    .pipe(changed(img_dest))
    .pipe(imageResize({
      width : 2048,
      crop : false,
      upscale : true,
      sharpen: false,
      quality: 1
    }))
    .pipe(imagemin({
            progressive: true,
            svgoPlugins: [{removeViewBox: false}],
            use: [pngquant()]
        }))
        .pipe(rename(function (path) {
          path.basename += "-2048";
        }))
        .pipe(gulp.dest(img_dest));
});
4

2 に答える 2

1

変更したプラグインをパイプする前にファイルの名前を変更して、プラグインが新しい名前のソース ファイルを取得するようにすることもできます。

gulp.task( 'resize-xl', function () {
return gulp.src( img_src )
   // change name first
   .pipe( rename( { suffix: '-2048' } ) )
   .pipe( changed( img_dest ) )

   // add here your image plugins: imageResize, imagemin, ..

   .pipe( gulp.dest( img_dest ) );
} );
于 2016-11-24T17:32:53.533 に答える
1

すべてのファイルが毎回処理されます。これは、タスクでgulp-changed(またはgulp-newer) が という名前のファイルへの変更をチェックするためですgulp.src(img_src)。また、ディレクトリにはimg_dest元の名前のファイルがないため、ディレクトリ内のすべてのファイルに対してタスクが実行されますimg_src

この問題を解決するには、変更されたファイルのステージング ディレクトリを使用できます。例えば:

1) 新しいディレクトリ '_resize' を作成します。

2) gulpfile.js を変更します。

var img_resize = '_resize';

gulp.task( 'resize-xl', function () {
    return gulp.src( img_src )
       .pipe( changed( img_resize ) )

       // add here your image plugins: imageResize, imagemin, ..

       // save the modified files with original names on '_resize' dir
       .pipe( gulp.dest( img_resize ) )

       .pipe( rename( { suffix: '-2048' } ) )
       // save the modified files with new names on destanation dir
       .pipe( gulp.dest( img_dest ) );
} );

最初の実行後、このタスクは新しいファイルと変更されたファイルのみを処理します

于 2016-02-24T11:19:29.003 に答える