【问题标题】:gulp task for(... in ...) create correctly?gulp task for(... in ...) 创建正确吗?
【发布时间】:2020-09-24 10:44:57
【问题描述】:

我做错了什么?

gulpfile.js

'use strict';

// Modules & Plugins
var gulp = require('gulp');
const image = require('gulp-image');
var $ = require('gulp-load-plugins')();

let directories = [
  '2006/Art1',
  '2006/Art2',
  '2010/Art1'
];

function gulpTask(directoryName) {
  gulp.task('blogmotionAllMedia', function () {
    return gulp
      .src('src/content/' + directoryName + '/media/*.{jpg,jpeg,png,gif}')
      .pipe($.responsive({
        '*.jpg': [
          { width: 400, rename: { suffix: '-4' } },
          { rename: { suffix: '-6' } }
        ],
      }))
      .pipe(image({
        jpegRecompress: true
      }))
      .pipe(gulp.dest('dist/content/' + directoryName + '/media'))
  });
}

var directory;

for (directory in directories) {
  gulpTask(directory);
}

运行任务 npx gulp gulpTask

意外

我收到以下错误消息:

Task never defined: gulpTask

我仍然依附于我的past question 和来自Milesanswer(想法)

【问题讨论】:

    标签: javascript gulp gulp-load-plugins


    【解决方案1】:

    首先,gulp 任务应注册为您要调用它的名称gulp.task('blogmotionAllMedia', ... 应为gulp.task('gulpTask', ...。 此外,我认为您应该遍历任务内部的目录。

    此外,我认为您需要使用 merge-stream by const merge = require('merge-stream')return merge(directories.map(singleDirectoryGulpTask)); 合并结果流

    结果应如下所示: (免责声明:多年来没有做过 gulp 的东西。仍然希望它有所帮助)

    'use strict';
    
    // Modules & Plugins
    var gulp = require('gulp');
    const image = require('gulp-image');
    var $ = require('gulp-load-plugins')();
    const merge = require('merge-stream')
    
    let directories = [
        '2006/Art1',
        '2006/Art2',
        '2010/Art1'
    ];
    
    gulp.task('gulpTask', function () {
        function singleDirectoryGulpTask(directoryName) {
            return gulp
                .src('src/content/' + directoryName + '/media/*.{jpg,jpeg,png,gif}')
                .pipe($.responsive({
                    '*.jpg': [
                        { width: 400, rename: { suffix: '-4' } },
                        { rename: { suffix: '-6' } }
                    ],
                }))
                .pipe(image({
                    jpegRecompress: true
                }))
                .pipe(gulp.dest('dist/content/' + directoryName + '/media'));
        }
    
        return merge(directories.map(singleDirectoryGulpTask));
    });
    
    

    【讨论】:

    • 谢谢,我试过了,收到了这条消息:以下任务没有完成:gulpTask 你忘记发出异步完成信号了吗?这是什么意思?
    • 根据这个stackoverflow.com/questions/26784094/…你需要使用merge-stream来收集多个gulp调用的结果流。
    • 对 Deine Hilfe 来说太棒了! Liebe Grüße aus Wien! {谢谢您的帮助!来自维也纳的问候!}
    【解决方案2】:

    变化:

    for (directory in directories) {
      gulpTask(directory);
    }
    

    到:

    for (directory of directories) {
      gulpTask(directory);
    }
    

    【讨论】:

    • 不幸的是不起作用。只拍摄第一个目录中的第一张照片
    猜你喜欢
    • 2021-05-16
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多