index.js
function read(path, options, callback) {
  var str = readCache[path];
  var cached = options.cache && str && ('string' === typeof str);

  // cached (only if cached is a string and not a compiled template function)
  if (cached) {
    return callback(null, str);
  }

  // read
  fs.readFile(path, 'utf8', function (err, str) {
    if (err) {
      return callback(err);
    }
    // remove extraneous utf8 BOM marker
    str = str.replace(/^\uFEFF/, '');
    if (options.cache) {readCache[path] = str;}
    callback(null, str);
  });
}
function read(path, options, callback) {
  var str = readCache[path];
  var cached = options.cache && str && ('string' === typeof str);

  // cached (only if cached is a string and not a compiled template function)
  if (cached) {
    return callback(null, str);
  }

  // read
  fs.readFile(path, 'utf8', function (err, str) {
    if (err) {
      return callback(err);
    }
    // remove extraneous utf8 BOM marker
    str = str.replace(/^\uFEFF/, '');
    if (options.cache) {readCache[path] = str;}
    callback(null, str);
  });
}
Read `path` with `options` with
callback `(err, str)`. When `options.cache`
is true the template string will be cached.

@param {String} options
@param {Function} callback
@api private