UNPKG

1.66 kBJavaScriptView Raw
1const path = require('path')
2const fs = require('fs')
3// const decache = require('decache')
4const merge = require('webpack-merge')
5const HtmlWebpackPlugin = require('html-webpack-plugin')
6
7const SERVER_RENDERING = process.env.GNOLL_SERVER_RENDERING
8
9const paths = require('./paths')
10
11const findConfig = options => {
12 if (options.config) return path.resolve(paths.root, options.config)
13 const rootConfigPath = path.join(paths.root, 'webpack.config.js')
14 if (fs.existsSync(rootConfigPath)) return rootConfigPath
15 return '../config/webpack'
16}
17
18const getTemplate = options => {
19 if (process.env.GNOLL_SERVER_RENDERING) return null
20 if (options.html === false) return null // --no-html
21 if (typeof options.html === 'string') {
22 return path.resolve(paths.root, options.html)
23 }
24 const defaultTemplate = path.join(paths.root, 'src/index.html')
25 if (fs.existsSync(defaultTemplate)) return defaultTemplate
26 return null
27}
28
29const mergeWithOptions = (config, options) => {
30 const optionsConfig = {}
31 if (options.entry) {
32 // webpack-serve works only with full format
33 optionsConfig.entry = { main: [options.entry] }
34 }
35 if (options.out) {
36 optionsConfig.output = { path: path.resolve(paths.root, options.out) }
37 }
38 const template = getTemplate(options)
39 if (template) optionsConfig.plugins = [new HtmlWebpackPlugin({ template })]
40 return merge(config, optionsConfig)
41}
42
43module.exports = options => {
44 const configPath = findConfig(options)
45 // decache(configPath) // This was used for compiling esmodules bundle
46 // eslint-disable-next-line import/no-dynamic-require, global-require
47 const config = require(configPath)
48 return mergeWithOptions(config, options)
49}