diff --git a/src/common/load-plugins.js b/src/common/load-plugins.js index 604215a2b..8036b989a 100644 --- a/src/common/load-plugins.js +++ b/src/common/load-plugins.js @@ -7,6 +7,7 @@ const path = require("path"); const resolve = require("resolve"); const thirdParty = require("./third-party"); const internalPlugins = require("./internal-plugins"); +const partition = require("../utils/partition"); function loadPlugins(plugins, pluginSearchDirs) { if (!plugins) { @@ -24,7 +25,12 @@ function loadPlugins(plugins, pluginSearchDirs) { } } - const externalManualLoadPluginInfos = plugins.map(pluginName => { + const [externalPluginNames, externalPluginInstances] = partition( + plugins, + plugin => typeof plugin === "string" + ); + + const externalManualLoadPluginInfos = externalPluginNames.map(pluginName => { let requirePath; try { // try local files @@ -69,12 +75,14 @@ function loadPlugins(plugins, pluginSearchDirs) { const externalPlugins = uniqBy( externalManualLoadPluginInfos.concat(externalAutoLoadPluginInfos), "requirePath" - ).map(externalPluginInfo => - Object.assign( - { name: externalPluginInfo.name }, - eval("require")(externalPluginInfo.requirePath) + ) + .map(externalPluginInfo => + Object.assign( + { name: externalPluginInfo.name }, + eval("require")(externalPluginInfo.requirePath) + ) ) - ); + .concat(externalPluginInstances); return internalPlugins.concat(externalPlugins); } diff --git a/src/utils/partition.js b/src/utils/partition.js new file mode 100644 index 000000000..979a6ef5e --- /dev/null +++ b/src/utils/partition.js @@ -0,0 +1,14 @@ +"use strict"; + +module.exports = function partition(array, fn) { + const a = []; + const b = []; + array.forEach(item => { + if (fn(item)) { + a.push(item); + } else { + b.push(item); + } + }); + return [a, b]; +}; diff --git a/tests_integration/__tests__/__snapshots__/format.js.snap b/tests_integration/__tests__/__snapshots__/format.js.snap index e25b72a35..405a972b8 100644 --- a/tests_integration/__tests__/__snapshots__/format.js.snap +++ b/tests_integration/__tests__/__snapshots__/format.js.snap @@ -4,6 +4,8 @@ exports[`html parser should handle CRLF correctly 1`] = `"\\"