GULP - запуск задачи условно в первый раз, а затем всегда на страже (выполнено не является функцией) - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть эта задача из RealFaviconGenerator , которая создает все значки на основе одного файла:

function generateFavicon(done) {
 return $.realFavicon.generateFavicon({
    masterPicture: 'app/favicon.svg',
    dest: 'app/favicon/',
    iconsPath: '/favicon',
    design: {
      ios: {
        pictureAspect: 'backgroundAndMargin',
        backgroundColor: '#ffffff',
        margin: '14%',
        assets: {
          ios6AndPriorIcons: false,
          ios7AndLaterIcons: false,
          precomposedIcons: false,
          declareOnlyDefaultIcon: true
        }
      },
      desktopBrowser: {},
      windows: {
        pictureAspect: 'noChange',
        backgroundColor: '#ffffff',
        onConflict: 'override',
        assets: {
          windows80Ie10Tile: false,
          windows10Ie11EdgeTiles: {
            small: false,
            medium: true,
            big: false,
            rectangle: false
          }
        }
      },
      androidChrome: {
        pictureAspect: 'noChange',
        themeColor: '#ffffff',
        manifest: {
          display: 'standalone',
          orientation: 'notSet',
          onConflict: 'override',
          declared: true
        },
        assets: {
          legacyIcon: false,
          lowResolutionIcons: false
        }
      },
      safariPinnedTab: {
        pictureAspect: 'blackAndWhite',
        threshold: 57.03125,
        themeColor: '#004c96'
      }
    },
    settings: {
      scalingAlgorithm: 'Mitchell',
      errorOnImageTooSmall: false,
      readmeFile: false,
      htmlCodeFile: false,
      usePathAsIs: false
    },
    markupFile: FAVICON_DATA_FILE
  }, function () {
    done();
  });
}

Я хочу запустить эту задачу, пока я работаю только gulp serveесли папка favicon, которая создает задачу generateFavicon, отсутствует.

Итак, я сделал это:

serve = series(clean, favicon = (done) => {
    fs.existsSync('app/favicon/') ? done() : generateFavicon();
}, parallel(views, styles, scripts, modernizr, fonts), startAppServer);

Таким образом задача создает все необходимые мне активы, но серия выигралане продолжайте:

[09:37:24] Starting 'serve'...
[09:37:24] Starting 'clean'...
[09:37:24] Finished 'clean' after 7.27 ms
[09:37:24] Starting 'favicon'...
[09:37:59] 'favicon' errored after 35 s
[09:37:59] TypeError: done is not a function

Снова запустив gulp serve теперь, когда каталог существует, все будет в порядке:

[09:43:51] Starting 'serve'...
[09:43:51] Starting 'clean'...
[09:43:51] Finished 'clean' after 6.99 ms
[09:43:51] Starting 'favicon'...
[09:43:51] Finished 'favicon' after 293 μs
[09:43:51] Starting 'views'...
[09:43:51] Starting 'styles'...
[09:43:51] Starting 'scripts'...
[09:43:51] Starting 'modernizr'...
[09:43:51] Starting 'fonts'...
[09:43:58] Finished 'fonts' after 6.76 s
[09:43:59] Finished 'modernizr' after 7.77 s
[09:44:11] Finished 'scripts' after 19 s
[09:44:11] Finished 'views' after 19 s
[09:44:11] Finished 'styles' after 20 s
[09:44:11] Starting 'startAppServer'...
[Browsersync] Access URLs:
 ---------------------------------------
        Local: http://localhost:9000
    External: http://192.168.13.117:9000
---------------------------------------
        UI: http://localhost:3001
UI External: http://localhost:3001
---------------------------------------
[Browsersync] Serving files from: .tmp
[Browsersync] Serving files from: app

С другой стороны, у меня также есть часы откогда файл favicon изменится (и будет), и он будет работать нормально:

watch('app/favicon.svg', generateFavicon);

[09:47:57] Starting 'generateFavicon'...
[09:48:28] Finished 'generateFavicon' after 31 s

Что я могу сделать с ошибкой "done is not function"? d

1 Ответ

1 голос
/ 26 сентября 2019

Вам нужно передать done для вашего generateFavicon в задании подачи:

serve = series(clean, favicon = (done) => {
    fs.existsSync('app/favicon/') ? done() : generateFavicon(done);
}, parallel(views, styles, scripts, modernizr, fonts), startAppServer);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...