【问题标题】:Ignore files containing given substring using glob.sync()使用 glob.sync() 忽略包含给定子字符串的文件
【发布时间】: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)'},但这也不起作用。

任何帮助将不胜感激。

【问题讨论】:

    标签: node.js gatsby glob sharp


    【解决方案1】:

    事实证明这是按预期工作的:

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

    answers to this question发现了重要线索。

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 2021-04-21
      • 2010-10-06
      • 1970-01-01
      • 2016-08-22
      • 2012-12-10
      相关资源
      最近更新 更多