如果目录不存在,如何使用 Node.js 创建目录

新手上路,请多包涵

如果目录不存在,以下是创建目录的正确方法吗?

它应该对脚本有完全的权限并且可以被其他人阅读。

 var dir = __dirname + '/upload';
if (!path.existsSync(dir)) {
    fs.mkdirSync(dir, 0744);
}

原文由 Whisher 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.2k
2 个回答

对于个人目录:

 var fs = require('fs');
var dir = './tmp';

if (!fs.existsSync(dir)){
    fs.mkdirSync(dir);
}

或者,对于嵌套目录:

 var fs = require('fs');
var dir = './tmp/but/then/nested';

if (!fs.existsSync(dir)){
    fs.mkdirSync(dir, { recursive: true });
}

原文由 chovy 发布,翻译遵循 CC BY-SA 4.0 许可协议

对于节点 v10 及更高版本

正如一些答案指出的那样,从节点 10 开始,您可以将 recursive:true 用于 mkdir

还没有指出的是, 当使用 recursive:true 时,如果目录已经存在,mkdir 不会返回错误

所以你可以这样做:

 fsNative.mkdir(dirPath,{recursive:true},(err) => {
    if(err) {
        //note: this does NOT get triggered if the directory already existed
        console.warn(err)
    }
    else{
        //directory now exists
    }
})

使用承诺

同样从节点 10 开始,您可以通过要求从 fs/promises 获得所有 fs 函数的 Promise 版本

所以把这两件事放在一起,你会得到这个简单的解决方案:

 import * as fs from 'fs/promises';

await fs.mkdir(dirPath, {recursive:true}).catch((err) => {
    //decide what you want to do if this failed
    console.error(err);
});

//directory now exists

原文由 Flion 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题