Node 递归或 mkdirp 创建多层目录
nodejs
递归创建目录,同步和异步方法。在官方API中只提供了最基本的方法,只能创建单级目录,如果要创建一个多级的目录(./aaa/bbb/ccc
)就只能一级一级的创建,感觉不是很方便,因此简单写了两个支持多级目录创建的方法。
# 使用 mkdirp 创建
# 安装 mkdirp 包
npm i mkdirp --save
1
# 基本使用
const mkdirp = require('mkdirp')
// return value is a Promise resolving to the first directory created
mkdirp('/tmp/foo/bar/baz').then(made =>
console.log(`made directories, starting with ${made}`)
)
// 或者
// return value is the first directory created
const made = mkdirp.sync('/tmp/foo/bar/baz')
console.log(`made directories, starting with ${made}`)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 使用递归创建
# 异步方法创建
let fs = require("fs");
let path = require("path");
//递归创建目录 异步方法
function mkdirs(dirname, callback) {
fs.exists(dirname, function (exists) {
if (exists) {
callback();
} else {
//console.log(path.dirname(dirname));
mkdirs(path.dirname(dirname), function () {
fs.mkdir(dirname, callback);
});
}
});
}
//调用
mkdirs("./aa/bb/cc", function (ee) {
console.log(ee)
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 同步方法创建
let fs = require("fs");
let path = require("path");
//递归创建目录 同步方法
function mkdirsSync(dirname) {
//console.log(dirname);
if (fs.existsSync(dirname)) {
return true;
} else {
if (mkdirsSync(path.dirname(dirname))) {
fs.mkdirSync(dirname);
return true;
}
}
}
//调用
mkdirsSync("./aa/bb/cc" , null);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 通用方法创建
/**
*生成多层目录
* @param dir 多层目录
* @param split 分隔符,ex:'/' 对应的目录地址:'2015/10/10'
* @param mode 目录权限(读写权限),默认0777
* @param callback
*/
let createDirsSync = function (dir, split, mode, callback) {
console.log("创建目录:" + dir);
if (!fs.existsSync(dir)) {
let dirArr = dir.split(split);
let pathtmp;
async.forEach(dirArr, function (item, cb) {
console.log( item);
if (pathtmp) {
pathtmp = path.join(pathtmp, item);
}
else {
pathtmp = item;
}
if (!fs.existsSync(pathtmp)) {
if (!fs.mkdirSync(pathtmp, mode)) {
cb(null, item);
}
else {
}
}
}, function (err) {
callback(err);
})
}
else {
callback(null);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
上次更新: 2024/01/30, 00:35:17
- 02
- Node与GLIBC_2.27不兼容解决方案08-19
- 03
- Git清空本地文件跟踪缓存08-13