You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js fs模块是否原生支持通配符模式复制文件?

Node.js fs模块原生支持通配符复制文件吗?

嘿,好问题!Node.js的原生fs模块本身**并不直接支持通配符(比如*)**来匹配文件并完成批量复制。也就是说,你没法直接给fs.copyFile()或者Node.js v16.7.0+新增的fs.cp()传入src/main/css/*这种带通配符的路径,让它自动匹配并复制所有符合规则的文件。

那要实现类似cp src/main/css/* ./dist的效果,有几种实用思路:

  • 原生能力+glob模块组合实现
    虽然glob不是Node.js核心模块,但它是社区广泛使用的文件匹配工具。你可以先用它找出所有符合通配符规则的文件路径,再遍历这些路径用fs的方法逐个复制:

    const fs = require('fs').promises;
    const glob = require('glob');
    const path = require('path');
    
    async function copyCssFiles() {
      // 匹配src/main/css下的所有直接文件
      const targetFiles = glob.sync('src/main/css/*');
      
      for (const file of targetFiles) {
        // 生成目标路径,保持文件名不变
        const destPath = path.join('./dist', path.basename(file));
        await fs.copyFile(file, destPath);
        console.log(`已复制:${file} → ${destPath}`);
      }
    }
    
    copyCssFiles().catch(err => console.error('复制出错:', err));
    
  • 用Node.js v16.7.0+的fs.cp()复制整个目录内容
    如果你想复制src/main/css下的所有内容(包括子目录)到dist,可以用fs.cp()的recursive选项,效果和cp -r src/main/css/* ./dist类似:

    const fs = require('fs').promises;
    
    async function copyCssDirContents() {
      await fs.cp('src/main/css', './dist', { recursive: true });
      console.log('CSS目录下的所有内容已复制到dist');
    }
    
    copyCssDirContents().catch(err => console.error('复制出错:', err));
    

    不过要注意,这个方法会把css目录里的所有层级内容都复制过去,如果只想复制css下的直接文件而排除子目录,还是得用第一种方法。

  • 直接用你找到的cpy包
    其实你发现的cpy包就是专门为这类场景设计的,它内部已经封装了glob匹配和文件复制的逻辑,用起来比自己组合模块更简洁:

    const cpy = require('cpy');
    
    (async () => {
      await cpy('src/main/css/*', './dist');
      console.log('CSS文件复制完成!');
    })();
    

总的来说,原生fs模块没有内置通配符复制的能力,但借助社区工具或者组合现有API,很容易实现你想要的效果,而cpy包是最省心的选择~

内容的提问来源于stack exchange,提问作者Ole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:55:34