skip to content

npm
探索 filename-reserved-regex

Repo : https://github.com/sindresorhus/filename-reserved-regex

Version : 3.0.0

简介

filename-reserved-regex 是一个用于检查文件名是否包含了操作系统保留关键字的 Node.js 模块。

以一个实际的场景举例:当你在使用 fs.writeFile 进行文件保存的时候,你可以用这个库提供的 API 对文件名进行检测,以此来判断文件名是否包含当前系统的保留关键字。

package.json

首先从 package.json 入手,了解一下这个 package 的一些基本信息。

  • type: 模块的类型,这里是 module,表示该模块使用 ES Module 模块语法。

  • exports: 模块的导出方式,这里是 ./index.js,表示该模块的默认导出是 index.js 文件。

  • engines: 模块所需的 Node.js 版本范围,这里是 ^12.20.0 || ^14.13.1 || >=16.0.0,表示该模块 Node.js 匹配的版本为

    • >= 12.20.0 and < 13.0.0

    • >= 14.13.1 and < 15.0.0

    • >= 16.0.0

  • files: 包含需要打包到发布包中的文件列表,这里只有一个 index.js 文件。

  • devDependencies: 包含该模块的开发依赖,这里有两个依赖,分别是 avaxo,分别用于用于测试和代码风格检查。

type exports engines 可以看出这个 package 已经告别了以往的 CommonJS 模块语法。从这个 commit 可以学习作者如何升级到 ESM。

一个用于校验 Semver 的工具: Semver Check

index.js

作为整个项目的文件十分简洁,只返回两个正则的函数。这两个函数都是用于检查文件名是否为保留文件名的正则表达式。

第一个函数 filenameReservedRegex() 返回的正则表达式用于匹配文件名中是否包含 Windows 和 Unix 系统下的保留字符。具体来说,它匹配的字符包括:

  • <(小于号)
  • >(大于号)
  • :(冒号)
  • "(双引号)
  • /(正斜杠)
  • \(反斜杠)
  • |(竖线)
  • ?(问号)
  • *(星号)
  • \u0000-\u001F(Unicode 控制字符)

这些字符都是文件名中不能使用的保留字符。如果文件名中包含了这些字符,可能会导致一些问题,例如无法正确地创建、读取或删除文件。

第二个函数 windowsReservedNameRegex() 返回的正则表达式用于匹配 Windows 系统下的特殊保留文件名。具体来说,它匹配的文件名包括:

  • con
  • prn
  • aux
  • nul
  • com0com9
  • lpt0lpt9

这些文件名都是 Windows 系统中的特殊保留文件名,不能用作普通文件名。如果尝试创建这些文件名的文件,可能会导致一些问题,例如无法正确地创建、读取或删除文件。

test.js

作为这个项目的测试文件没有太多可以剖析的。

不过 ava 这个库可以留意下,如果需要测试的代码很少可以使用它作为 jest mocha+chai 的一个轻量级的替代 。

.github/workflows/main.yml

作为这个项目的 CI 配置也比较轻量。这个 GitHub Actions 的配置文件定义了一个名为 CI 的工作流,当代码被 push 或 pull request 时触发。工作流包含一个名为 test 的 job,该 job 在 Ubuntu 系统上运行,使用 Node.js 16 版本,并执行 npm install 和 npm test 两个命令来安装依赖和运行测试。