如果父文件夹不存在,如何写文件?
我需要写文件到以下path:
fs.writeFile('/folder1/folder2/file.txt', 'content', function () { });  但是'/folder1/folder2'path可能不存在。 所以我得到以下错误: 
  message=ENOENT, open /folder1/folder2/file.txt 
我怎样才能将内容写入该path?
 首先将mkdirp与path.dirname结合使用。 
 var mkdirp = require('mkdirp'); var fs = require('fs'); var getDirName = require('path').dirname; function writeFile(path, contents, cb) { mkdirp(getDirName(path), function (err) { if (err) return cb(err); fs.writeFile(path, contents, cb); }); } 
 如果整个path已经存在, mkdirp是一个noop。 否则,它会为您创build所有丢失的目录。 
这个模块做你想要的: https : //npmjs.org/package/writefile 。 当谷歌search“writefile mkdirp”时得到它。 这个模块返回一个promise,而不是callback,所以一定要先阅读promise的一些介绍。 这可能会让事情变复杂。
无论如何,我所做的function都是有效的。
也许最简单的,你可以使用fs-path npm模块。
您的代码将如下所示:
 var fsPath = require('fs-path'); fsPath.writeFile('/folder1/folder2/file.txt', 'content', function(err){ if(err) { throw err; } else { console.log('wrote a file like DaVinci drew machines'); } }); 
我发现最简单的方法是使用fs-extra模块的outputFile ()方法。
几乎与writeFile(即覆盖)相同,除了如果父目录不存在,它是创build。 选项是你要传给fs.writeFile()的东西。
例:
 var fs = require('fs-extra'); var file = '/tmp/this/path/does/not/exist/file.txt' fs.outputFile(file, 'hello!', function (err) { console.log(err); // => null fs.readFile(file, 'utf8', function (err, data) { console.log(data); // => hello! }); }); 
它也有承诺支持开箱即日!
您可以使用
 fs.stat('/folder1/folder2', function(err, stats){ ... }); 
  stats是一个fs.Statstypes的对象,你可以检查stats.isDirectory() 。 根据err和stats的检查,你可以做一些事情, fs.mkdir( ... )或抛出一个错误。 
参考
更新:修复代码中的逗号。
如果它们不存在,recursion地创build目录! ( 零依赖 )
 const fs = require('fs'); const path = require('path'); const targetDir = '/folder1/folder2'; const sep = path.sep; const initDir = path.isAbsolute(targetDir) ? sep : ''; targetDir.split(sep).reduce((parentDir, childDir) => { const curDir = path.resolve(parentDir, childDir); if (!fs.existsSync(curDir)) { fs.mkdirSync(curDir); } return curDir; }, initDir); // Then create your file fs.writeFile(path.resolve(targetDir, 'file.txt'), 'content', () => {}); 
尝试一下!
- 该解决scheme处理相对path和绝对path
-  在相对path的情况下,将在当前工作目录中创build(parsing)目标目录。 要将它们parsing为当前的脚本目录,请使用__dirname,如下所示:path.resolve(__dirname, parentDir, childDir);。
-  使用path.sep和path.resolve(),而不仅仅是/concatenation,以避免跨平台的问题。
这是Myrne Stol的答案,作为一个单独的答案分解出来的一部分:
这个模块做你想要的: https : //npmjs.org/package/writefile 。 当谷歌search“writefile mkdirp”时得到它。 这个模块返回一个promise,而不是callback,所以一定要先阅读promise的一些介绍。 这可能会让事情变复杂。
这是我的自定义函数recursion创build目录(没有外部依赖):
 var fs = require('fs'); var path = require('path'); var myMkdirSync = function(dir){ if (fs.existsSync(dir)){ return } try{ fs.mkdirSync(dir) }catch(err){ if(err.code == 'ENOENT'){ myMkdirSync(path.dirname(dir)) //create parent dir myMkdirSync(dir) //create dir } } } myMkdirSync(path.dirname(filePath)); var file = fs.createWriteStream(filePath);