【发布时间】:2023-03-11 11:58:02
【问题描述】:
我正在尝试编写一个简单的节点脚本来调整大文件的大小(旨在解决大型纵向文件的问题)。主要部分代码直接来自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)'},但这也不起作用。
任何帮助将不胜感激。
【问题讨论】: