Added error handling to file write for both css file and source map file.

#2408
This commit is contained in:
jurcovicovam
2015-01-26 10:49:47 +01:00
parent 8ed6a9748e
commit ea122a8ea5
2 changed files with 72 additions and 23 deletions

View File

@@ -3,8 +3,15 @@
var path = require('path'),
fs = require('../lib/less-node/fs'),
os = require('os'),
errno,
mkdirp;
try {
errno = require('errno');
} catch (err) {
errno = null;
}
var less = require('../lib/less-node'),
pluginLoader = new less.PluginLoader(less),
plugin,
@@ -341,14 +348,67 @@ if (options.depends) {
}
if (!sourceMapFileInline) {
var writeSourceMap = function(output) {
var writeSourceMap = function(output, onDone) {
var filename = sourceMapOptions.sourceMapFullFilename;
ensureDirectory(filename);
fs.writeFileSync(filename, output, 'utf8');
less.logger.info('lessc: wrote ' + filename);
fs.writeFile(filename, output, 'utf8', function (err) {
if (err) {
var description = "Error: ";
if (errno && errno.errno[err.errno]) {
description += errno.errno[err.errno].description;
} else {
description += err.code + " " + err.message;
}
less.logger.error('lessc: failed to create file ' + filename);
less.logger.error(description);
} else {
less.logger.info('lessc: wrote ' + filename);
}
onDone();
});
};
}
var writeSourceMapIfNeeded = function(output, onDone) {
if (options.sourceMap && !sourceMapFileInline) {
writeSourceMap(output, onDone);
}
};
var writeOutput = function(output, result, onSuccess) {
if (output) {
ensureDirectory(output);
fs.writeFile(output, result.css, {encoding: 'utf8'}, function (err) {
if (err) {
var description = "Error: ";
if (errno && errno.errno[err.errno]) {
description += errno.errno[err.errno].description;
} else {
description += err.code + " " + err.message;
}
less.logger.error('lessc: failed to create file ' + output);
less.logger.error(description);
} else {
less.logger.info('lessc: wrote ' + output);
onSuccess();
}
});
} else if (!options.depends) {
process.stdout.write(result.css);
onSuccess();
}
};
var logDependencies = function(options, result) {
if (options.depends) {
var depends = "";
for(var i = 0; i < result.imports.length; i++) {
depends += result.imports[i] + " ";
}
console.log(depends);
}
};
var parseLessFile = function (e, data) {
if (e) {
console.log("lessc: " + e.message);
@@ -390,23 +450,11 @@ var parseLessFile = function (e, data) {
less.render(data, options)
.then(function(result) {
if(!options.lint) {
if (output) {
ensureDirectory(output);
fs.writeFileSync(output, result.css, 'utf8');
less.logger.info('lessc: wrote ' + output);
} else if (!options.depends) {
process.stdout.write(result.css);
}
if (options.sourceMap && !sourceMapFileInline) {
writeSourceMap(result.map);
}
if (options.depends) {
var depends = "";
for(var i = 0; i < result.imports.length; i++) {
depends += result.imports[i] + " ";
}
console.log(depends);
}
writeOutput(output, result, function() {
writeSourceMapIfNeeded(result.map, function() {
logDependencies(options, result);
});
});
}
},
function(err) {

View File

@@ -40,13 +40,14 @@
"test": "grunt test"
},
"optionalDependencies": {
"errno": "^0.1.1",
"graceful-fs": "^3.0.5",
"image-size": "~0.3.5",
"mime": "^1.2.11",
"request": "^2.51.0",
"mkdirp": "^0.5.0",
"source-map": "^0.1.x",
"promise": "^6.0.1",
"image-size": "~0.3.5"
"request": "^2.51.0",
"source-map": "^0.1.x"
},
"devDependencies": {
"diff": "^1.0",