Я пытаюсь написать простой скрипт узла для изменения размера больших файлов (предназначенный для решения проблемы с большими портретно-ориентированными файлами). Основная часть кода взята непосредственно из 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)'}
, но это тоже не работает.
Любая помощь будет принята с благодарностью.