UNPKG

1.53 kBJavaScriptView Raw
1const path = require('path')
2const fs = require('fs')
3const 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) optionsConfig.entry = options.entry
32 if (options.out) {
33 optionsConfig.output = { path: path.resolve(paths.root, options.out) }
34 }
35 const template = getTemplate(options)
36 if (template) optionsConfig.plugins = [new HtmlWebpackPlugin({ template })]
37 return merge(config, optionsConfig)
38}
39
40module.exports = options => {
41 const configPath = findConfig(options)
42 decache(configPath)
43 // eslint-disable-next-line import/no-dynamic-require, global-require
44 const config = require(configPath)
45 return mergeWithOptions(config, options)
46}