UNPKG

@webpack-blocks/core

Version:

Functional approach to compose your webpack config.

48 lines (42 loc) 1.7 kB
const { assertConfigSetters, invokeConfigSetters } = require('./configSetters') const { invokePreHooks, invokePostHooks } = require('./hooks') module.exports = createConfig /** * Takes an array of webpack blocks and creates a webpack config out of them. * Each webpack block is a callback function which will be invoked to return a * partial webpack config. These partial configs are merged to create the * final, complete webpack config that will be returned. * * @param {object} initialContext The blueprint for the initial context object. * @param {object} initialContext.webpack Webpack instance * @param {object} initialContext.webpackVersion Webpack version (`{ major, minor, ... }`) * @param {Function[]} configSetters Array of functions as returned by webpack blocks. * @return {object} Webpack config object. */ function createConfig(initialContext, configSetters) { if (!initialContext) { throw new Error(`No initial context passed.`) } assertConfigSetters(configSetters) const baseConfig = { resolve: { // Explicitly define default extensions, otherwise blocks will overwrite them instead of extending extensions: ['.js', '.json'] }, // Less noisy than default settings stats: { children: false, chunks: false, modules: false, reasons: false }, module: { rules: [] }, plugins: [] } invokePreHooks(configSetters, initialContext) const config = invokeConfigSetters(configSetters, initialContext, baseConfig) const postProcessedConfig = invokePostHooks(configSetters, initialContext, config) return postProcessedConfig }