diff --git a/lib/less-node/file-manager.js b/lib/less-node/file-manager.js index e98bd7e8b..435dbfb46 100644 --- a/lib/less-node/file-manager.js +++ b/lib/less-node/file-manager.js @@ -108,10 +108,23 @@ FileManager.prototype.loadFile = function(filename, currentDirectory, options, e } } + var modified = false; + if (self.contents[fullFilename]) { - fulfill({ contents: self.contents[fullFilename], filename: fullFilename}); + try { + var stat = fs.statSync.apply(this, [fullFilename]); + if (stat.mtime.getTime() === self.contents[fullFilename].mtime.getTime()) { + fulfill({ contents: self.contents[fullFilename].data, filename: fullFilename}); + } + else { + modified = true; + } + } + catch (e) { + modified = true; + } } - else { + if (modified || !self.contents[fullFilename]) { var readFileArgs = [fullFilename]; if (!options.rawBuffer) { readFileArgs.push('utf-8'); @@ -119,7 +132,8 @@ FileManager.prototype.loadFile = function(filename, currentDirectory, options, e if (options.syncImport) { try { var data = fs.readFileSync.apply(this, readFileArgs); - self.contents[fullFilename] = data; + var stat = fs.statSync.apply(this, [fullFilename]); + self.contents[fullFilename] = { data: data, mtime: stat.mtime }; fulfill({ contents: data, filename: fullFilename}); } catch (e) { @@ -133,7 +147,8 @@ FileManager.prototype.loadFile = function(filename, currentDirectory, options, e filenamesTried.push(isNodeModule ? npmPrefix + fullFilename : fullFilename); return tryPrefix(j + 1); } - self.contents[fullFilename] = data; + var stat = fs.statSync.apply(this, [fullFilename]); + self.contents[fullFilename] = { data: data, mtime: stat.mtime }; fulfill({ contents: data, filename: fullFilename}); }); fs.readFile.apply(this, readFileArgs);