前言
承接上篇文章《手把手教你发布自己的NPM包》。
项目中遇到需要复制及移动文件夹的异步操作,看了下目前只有针对文件移动的模块copyfiles, 并没有针对文件夹,故简单写了小模块方便使用。
安装
npm i node-cpdir
或
yarn add node-cpdir
使用方法
const cpdir= require('node-cpdir');
cpdir('./src', './dist').then(() => {
// succeed!
}, (err) => {
console.log(err)
})
功能
将文件夹src
及其所有子文件(不包括子文件夹)复制到文件夹dist
中,并包装成了promise。
- 本模块只实现最简功能,均采用node原生方法,无任何依赖;
- 源路径和目标路径均为绝对路径,如需相对路径,可以用
path.resolve(__dirname, 'xxx/xxx')
; - 如果需要转移子文件夹,可以自行添加递归;
- 如果需要检查目标文件夹的存在,没有则创建,可以通过
fs.accessSync(dist)和fs.mkdirSync(dist)
来实现; - 如果只需要复制子文件,则去除创建文件夹;
模块源码
/**
* 复制文件夹
* @param src {String} 要复制的目录
* @param dist {String} 复制目标目录
*/
function copydir(src, dist) {
return new Promise((resolve, reject) => {
try {
const dirName = src.split('/').pop();
fs.mkdirSync(dist + '/' + dirName);
fs.readdirSync(src).forEach((p, i, arr) => {
let _src = src + '/' + p;
let _dist = dist + '/' + dirName + '/' + p;
try {
fs.writeFileSync(_dist, fs.readFileSync(_src));
if (i === arr.length - 1) resolve();
} catch(e) {
reject(e);
}
})
} catch (e) {
reject(e);
}
})
}
module.exports = copydir;