We could check for fieldTemplates[this.templateDir + '-' + templateType] before calling path.resolve here to make it more efficient.

I also wouldn't make templateType default, it should always be specified.

Also I think `compiledTemplates` is clearer as the cache variable than `fieldTemplates`

So:

if (compiledTemplates[this.templateDir + '-' + templateType]) {
    return callback();
}
fs.readFile(filePath, 'utf8', function(err,data) {
    // ...
});