复制操作
复制文件
fs
或fs/promise
复制文件调用copyFile(src, dist, mode?, callback)
mode
总共三种模式,可以使用按位或的方式同时指定:COPYFILE_EXCL | COPYFILE_FICLONE
,COPYFILE_EXCL | COPYFILE_FICLONE_FORCE
。
// cpFile.js
const { copyFile, constants } = require('node:fs');
function callback(err) {
if (err) throw err;
console.log('source.txt was copied to destination.txt');
}
// 默认会覆盖目标文件内容
copyFile('source.txt', 'destination.txt', callback);
// 使用COPYFILE_EXCL,如果目标文件存在就报错
copyFile('source.txt', 'destination.txt', constants.COPYFILE_EXCL, callback);
复制文件夹
直接复制文件夹使用cp(src, dist, options)
。
将public
目录的内容复制到dist
目录。
// cp.js
const { cp } = require('node:fs');
cp('public', 'dist', {
recursive: true,
force: true,
});
复制特定文件或文件夹需要使用filter
函数:
filter
函数返回true
会递归遍历文件夹下的所有文件或文件夹
// cp.js
const { cp } = require('node:fs');
const key = 'abc';
const srcDir = 'public';
cp(`packages/abc`, 'dist', {
recursive: true,
force: true,
filter: async function (source) {
// 在windows下会有\\\\?\\前缀
// 只会复制abc/public目录(包含public)进入目标文件夹
if (source.split('\\').includes(srcDir)) {
return true;
}
// 这里让source最后等于abc的通过,否则无法继续遍历
if (source.split('\\').slice(-1)[0] === key) {
return true;
}
},
});