この非同期再帰関数を使用して、ディレクトリのファイルとフォルダを反復処理しています。.cssファイルが見つかったら、「common.css」というファイルにデータを追加します。
var walk = function(dir, done) {
var results = [];
fs.readdir(dir, function(err, list) {
if (err) return done(err);
var pending = list.length;
if (!pending) return done(null);
list.forEach(function(file) {
file = dir + '/' + file;
fs.stat(file, function(err, stat) {
if (stat && stat.isDirectory()) {
minimizer(file, function(err, res) {
results = results.concat(res);
if (!--pending) done(null);
});
} else if(file) {
fs.open('common.css', 'a', 666, function( err, id ) {
fs.write( id, 'hello', null, 'utf8', function(){
fs.close(id, function(){
console.log('file closed');
});
});
});
}
if (!--pending) done(null);
});
});
}); }
問題は、非同期であるため、関数の複数のインスタンスが同時にファイルに書き込んでいる場合があると感じていることです。このフラックスを制御し、書き込みタスクをキューに入れる方法はありますか?
このコードの目的は、ディレクトリにある.cssファイルをマージすることです。このプロジェクトでは外部ツールを使用できません。
回答の編集:この目的のために、マージするすべての.cssファイルのパスを収集し、それらをすべて取得したら、同期関数を呼び出してそれらを書き込みます。
それが
var results = []
のためにあります。気づいた。