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
: 包含该模块的开发依赖,这里有两个依赖,分别是ava
和xo
,分别用于用于测试和代码风格检查。
从 type exports engines
可以看出这个 package 已经告别了以往的 CommonJS 模块语法。从这个 commit 可以学习作者如何升级到 ESM。
一个用于校验 Semver 的工具: Semver Check
index.js
作为整个项目的文件十分简洁,只返回两个正则的函数。这两个函数都是用于检查文件名是否为保留文件名的正则表达式。
第一个函数 filenameReservedRegex()
返回的正则表达式用于匹配文件名中是否包含 Windows 和 Unix 系统下的保留字符。具体来说,它匹配的字符包括:
<
(小于号)>
(大于号):
(冒号)"
(双引号)/
(正斜杠)\
(反斜杠)|
(竖线)?
(问号)*
(星号)\u0000-\u001F
(Unicode 控制字符)
这些字符都是文件名中不能使用的保留字符。如果文件名中包含了这些字符,可能会导致一些问题,例如无法正确地创建、读取或删除文件。
第二个函数 windowsReservedNameRegex()
返回的正则表达式用于匹配 Windows 系统下的特殊保留文件名。具体来说,它匹配的文件名包括:
con
prn
aux
nul
com0
到com9
lpt0
到lpt9
这些文件名都是 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 两个命令来安装依赖和运行测试。