Providing an asynchronous API that returns Promises forces an asynchronous approach instead of giving developers the flexibility to use the API in a synchronous or asynchronous way. I propose something like:
var result = envsub_sync(templateFile, outputFile, options);