diff --git a/lib/preprocessor.js b/lib/preprocessor.js index b42bbcb92..711400ed0 100644 --- a/lib/preprocessor.js +++ b/lib/preprocessor.js @@ -54,7 +54,10 @@ function createPriorityPreprocessor (config, preprocessorPriority, basePath, inj return } - let p + let p = instances[name] + if (p) { + return p + } try { p = injector.get('preprocessor:' + name) @@ -68,6 +71,14 @@ function createPriorityPreprocessor (config, preprocessorPriority, basePath, inj emitter.emit('load_error', 'preprocessor', name) } + if (!p && !alreadyDisplayedErrors[name]) { + alreadyDisplayedErrors[name] = true + log.error(`Failed to instantiate preprocessor ${name}`) + emitter.emit('load_error', 'preprocessor', name) + } else { + instances[name] = p + } + return p } @@ -107,31 +118,20 @@ function createPriorityPreprocessor (config, preprocessorPriority, basePath, inj }) // Apply preprocessor priority. - let sortedPreprocessorNames = preprocessorNames + const preprocessors = preprocessorNames .map((name) => [name, preprocessorPriority[name] || 0]) .sort((a, b) => b[1] - a[1]) .map((duo) => duo[0]) + .reduce((res, name) => { + const p = instantiatePreprocessor(name) - let preprocessors = [] - sortedPreprocessorNames.forEach((name) => { - const p = instances[name] || instantiatePreprocessor(name) - - if (p == null) { - if (!alreadyDisplayedErrors[name]) { - alreadyDisplayedErrors[name] = true - log.error(`Failed to instantiate preprocessor ${name}`) - emitter.emit('load_error', 'preprocessor', name) + if (!isBinary || (p && p.handleBinaryFiles)) { + res.push(p) + } else { + log.warn(`Ignored preprocessing ${file.originalPath} because ${name} has handleBinaryFiles=false.`) } - return - } - - instances[name] = p - if (!isBinary || p.handleBinaryFiles) { - preprocessors.push(p) - } else { - log.warn(`Ignored preprocessing ${file.originalPath} because ${name} has handleBinaryFiles=false.`) - } - }) + return res + }, []) runProcessors(preprocessors, file, isBinary ? buffer : buffer.toString()).then(done, done) })