CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Node.js 进阶/课时/glob 与文件模式
RawBlame
课时目录12 节

Node.js 进阶

  1. 01Node 进阶概览
  2. 02EventEmitter
  3. 03错误类型与处理
  4. 04语义化版本
  5. 05创建与发布包
  6. 06命令行应用
  7. 07Inquirer 与 prompts
  8. 08chokidar 与热重载
  9. 09模板引擎
  10. 10Node 与数据库
  11. 11glob 与文件模式
  12. 12综合练习

glob 与文件模式

glob、globby、fs-extra。

25 分钟

glob 与文件模式

批处理脚本要 按模式找文件:src/**/*.ts、排除 node_modules、复制目录树——glob / globby 匹配路径,fs-extra 简化复制与 mkdir。本课为 nva-templates 与 nva-practice 提供文件扫描基础。

学习目标

  • 编写常见 glob 模式与 negation
  • 用 globby 异步枚举文件
  • 用 fs-extra 安全复制目录

glob 模式速查

模式含义
*单段任意字符
**跨目录递归
?单字符
!**/node_modules/**negation 排除
import { globby } from "globby";

const files = await globby([
  "content/课程/**/drafts/*.md",
  "!**/node_modules/**",
]);

console.log(files.length, "draft files");

与 node-fs 的 readdir 手写递归相比,globby 可读、可排除。

fs-extra 常用 API

import fs from "fs-extra";

await fs.ensureDir("out/import");
await fs.copy("templates", "out/import/templates", { overwrite: false });
await fs.writeJson("out/import/manifest.json", { count: 42 }, { spaces: 2 });

ensureDir 避免 ENOENT;copy 适合 scaffold CLI。

与 chokidar 配合

nva-watch 的 watch 字符串与 globby 模式 尽量一致,否则「监听到了但没扫描到」会不同步。

性能注意

  • 仓库根目录跑 **/* 可能很慢—— 收窄根路径
  • 大量小文件:考虑 stream 处理(node-streams)而非一次读入内存
  • import 脚本应对 单文件大小 设上限,防 OOM

练习

  • glob 列出 nodejs-advanced-essentials/drafts/*.md
  • 复制某 draft 到 并加时间戳后缀
out/backup/
  • 写函数 findDuplicates(files) 按 basename 找冲突
  • 小结

    globby 找文件,fs-extra 搬文件,模式与 watch 对齐。 下一课综合练习:import 脚本 CLI。

    加载本节练习…
    ← 上一课Node 与数据库下一课 →综合练习