UNPKG

@rockpack/compiler

Version:

The easiest webpack config generator.

103 lines (85 loc) 2.98 kB
const { getMode, getRootRequireDir } = require('@rockpack/utils'); const { existsSync } = require('node:fs'); const path = require('node:path'); const { isDefined, isFunction } = require('valid-types'); const webpack = require('webpack'); const makeDevServer = require('../modules/make-dev-server'); const makeDevtool = require('../modules/make-devtool'); const makeEntry = require('../modules/make-entry'); const makeExternals = require('../modules/make-externals'); const makeModules = require('../modules/make-modules'); const makeOptimization = require('../modules/make-optimization'); const makeOutput = require('../modules/make-output'); const makePlugins = require('../modules/make-plugins'); const makeResolve = require('../modules/make-resolve'); const makeStats = require('../modules/make-stats'); const compileWebpackConfig = require('../utils/compile-webpack-config'); const mergeConfWithDefault = require('../utils/merge-conf-with-default'); const _make = async (conf, post) => { const mode = getMode(); const root = getRootRequireDir(); const packageJson = existsSync(path.resolve(root, 'package.json')) ? require(path.resolve(root, 'package.json')) : {}; conf = await mergeConfWithDefault(conf, mode); const { context, entry } = makeEntry(conf, root, mode); const output = makeOutput(conf, root, mode); const devtool = makeDevtool(mode, conf); const devServer = await makeDevServer(conf); const optimization = makeOptimization(mode, conf); const modules = makeModules(conf, root, packageJson, mode); const plugins = await makePlugins(conf, root, packageJson, mode, webpack, context); const resolve = makeResolve(root); const stats = makeStats(conf); const externals = makeExternals(conf, root); const finalConfig = { devServer, devtool, entry, externals, optimization, output, resolve, stats, }; finalConfig.infrastructureLogging = { level: 'error', }; if (typeof conf.name === 'string') { finalConfig.name = conf.name; } finalConfig.mode = mode; if (isDefined(conf.externals)) { finalConfig.externals = conf.externals; } if (conf.nodejs) { finalConfig.target = 'node'; finalConfig.externalsPresets = { node: true, }; } else if (global.ISOMORPHIC) { finalConfig.externalsPresets = { node: true, }; } if (mode === 'development' || conf.debug) { finalConfig.watch = true; finalConfig.cache = true; finalConfig.performance = { hints: false, }; } if (mode === 'production' && !conf.debug) { finalConfig.performance = { hints: 'warning', }; if (!finalConfig.output) { finalConfig.output = {}; } finalConfig.output.pathinfo = false; } if (isFunction(post)) { post(finalConfig, modules, plugins, mode); } const webpackConfig = compileWebpackConfig(finalConfig, conf, mode, root, modules, plugins); return { conf, webpackConfig }; }; module.exports = _make;