A partir de Node v10, ceci est intégré dans la fonction fs.mkdir que nous pouvons utiliser en combinaison avec la fonction path.dirname :
var fs = require('fs');
var getDirName = require('path').dirname;
function writeFile(path, contents, cb) {
fs.mkdir(getDirName(path), { recursive: true}, function (err) {
if (err) return cb(err);
fs.writeFile(path, contents, cb);
});
}
Pour les anciennes versions, vous pouvez utiliser mkdirp :
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);
});
}
Si le chemin entier existe déjà, mkdirp
est un non sens. Sinon, il crée tous les répertoires manquants pour vous.
Ce module fait ce que vous voulez : https://npmjs.org/package/writefile . Je l'ai trouvé en cherchant sur Google "writefile mkdirp". Ce module retourne une promesse au lieu de prendre un callback, donc assurez-vous de lire une introduction aux promesses d'abord. Cela pourrait en fait compliquer les choses pour vous.
La fonction que j'ai donnée fonctionne dans tous les cas.
3 votes
fs.promises.mkdir(path.dirname('/folder1/folder2/file.txt'), {recursive: true}).then(x => fs.promises.writeFile('/folder1/folder2/file.txt', 'content'))