Игнорировать файлы, содержащие данную подстроку, используя glob.syn c () - PullRequest
0 голосов
/ 01 февраля 2020

Я пытаюсь написать простой скрипт узла для изменения размера больших файлов (предназначенный для решения проблемы с большими портретно-ориентированными файлами). Основная часть кода взята непосредственно из gatsby docs .

module.exports = optimizeImages = () => {
  const sharp = require(`sharp`)
  const glob = require(`glob`)
  const matches = glob.sync(`src/images/**/*!(optimized).{png,jpg,jpeg}`) // <-- There is the problem
  console.log('matches:', matches)
  const MAX_WIDTH = 1800
  const QUALITY = 70
  Promise.all(
    matches.map(async match => {
      const stream = sharp(match)
      const info = await stream.metadata()
      if (info.width < MAX_WIDTH) {
        return
      }
      const optimizedName = match.replace(
        /(\..+)$/,
        (match, ext) => `-optimized${ext}`
      )
      await stream
        .resize(MAX_WIDTH)
        .jpeg({ quality: QUALITY })
        .toFile(optimizedName)
        .then(newFile => console.log(newFile))
        .catch(error => console.log(error))
      return true
    })
  )
}

Код, кажется, работает как задумано, НО Я не могу понять как сопоставить имена файлов, которые уже оптимизированы . Их имена должны заканчиваться суффиксом «-optimized».

  • src/images/foo.jpg должен обрабатываться
  • src/images/bar-optimized.jpg должен игнорироваться

Я имею пытался использовать шаблон src/images/**/*!(optimized).{png,jpg,jpeg}, но это не работает. Я пытался использовать {ignore: 'src/images/**/*!(optimized)'}, но это тоже не работает.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 01 февраля 2020

Оказывается, это работает как задумано:

const matches = glob.sync(`src/images/**/*.{png,jpg,jpeg}`, {
  ignore: ['src/images/**/*-optimized.*']
})

Важные подсказки были найдены в ответах на этот вопрос .

...