node:fs
NodeJs 的文件模块,最常用的模块之一
文件权限
fs.access 可以测试当前用户对某个目录的权限。第一个参数是要测试的目录,第二个参数 mode 来自 fs 模块导出的常量 constants,采用二次幂权限设计,所以可以用并集叠加权限。
import { access, constants } from 'node:fs/promises';
try {
await access('/etc/passwd', constants.R_OK | constants.W_OK);
console.log('can access');
} catch {
console.error('cannot access');
}access 第二个参数默认是 constants.F_OK,即检查文件是否存在
F_OK:是否存在R_OK:可读W_OK:可写X_OK:可执行
constants 的所有值
{
UV_FS_SYMLINK_DIR: 1,
UV_FS_SYMLINK_JUNCTION: 2,
O_RDONLY: 0,
O_WRONLY: 1,
O_RDWR: 2,
UV_DIRENT_UNKNOWN: 0,
UV_DIRENT_FILE: 1,
UV_DIRENT_DIR: 2,
UV_DIRENT_LINK: 3,
UV_DIRENT_FIFO: 4,
UV_DIRENT_SOCKET: 5,
UV_DIRENT_CHAR: 6,
UV_DIRENT_BLOCK: 7,
S_IFMT: 61440,
S_IFREG: 32768,
S_IFDIR: 16384,
S_IFCHR: 8192,
S_IFBLK: 24576,
S_IFIFO: 4096,
S_IFLNK: 40960,
S_IFSOCK: 49152,
O_CREAT: 512,
O_EXCL: 2048,
UV_FS_O_FILEMAP: 0,
O_NOCTTY: 131072,
O_TRUNC: 1024,
O_APPEND: 8,
O_DIRECTORY: 1048576,
O_NOFOLLOW: 256,
O_SYNC: 128,
O_DSYNC: 4194304,
O_SYMLINK: 2097152,
O_NONBLOCK: 4,
S_IRWXU: 448,
S_IRUSR: 256,
S_IWUSR: 128,
S_IXUSR: 64,
S_IRWXG: 56,
S_IRGRP: 32,
S_IWGRP: 16,
S_IXGRP: 8,
S_IRWXO: 7,
S_IROTH: 4,
S_IWOTH: 2,
S_IXOTH: 1,
F_OK: 0,
R_OK: 4,
W_OK: 2,
X_OK: 1,
UV_FS_COPYFILE_EXCL: 1,
COPYFILE_EXCL: 1,
UV_FS_COPYFILE_FICLONE: 2,
COPYFILE_FICLONE: 2,
UV_FS_COPYFILE_FICLONE_FORCE: 4,
COPYFILE_FICLONE_FORCE: 4
}可以用于检查一些所在目录权限较高的文件,或者是像 .pem 这种结尾的加密的文件
统计信息
使用 fs.stat 可以获得文件的统计信息
import { statSync } from "fs";
console.log(
statSync('./index.ts')
) //=> {...}返回的重要的字段,尤其是可以通过 size 读取到文件的大小:
size:文件的大小,单位为字节mode:文件权限和类型的掩码birthtime:文件创建的时间的 JS 对象时间戳aTime:文件最后访问时间的 JS 对象时间戳mTime:文件最后修改时间的 JS 对象时间戳
所有字段
{
dev: 16777232,
mode: 16877,
nlink: 14,
uid: 501,
gid: 20,
rdev: 0,
blksize: 4096,
ino: 750776,
size: 448,
blocks: 0,
atimeMs: 1699370220110.4724,
mtimeMs: 1699370220098.3525,
ctimeMs: 1699370220098.3525,
birthtimeMs: 1699284946242.8271,
atime: 2023-11-07T15:17:00.110Z,
mtime: 2023-11-07T15:17:00.098Z,
ctime: 2023-11-07T15:17:00.098Z,
birthtime: 2023-11-06T15:35:46.243Z
}