-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwebpack.js
84 lines (76 loc) · 3.94 KB
/
webpack.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
const set = require("lodash.set")
const { resolve } = require('path')
const CopyPlugin = require("copy-webpack-plugin")
function rendererConfig (config) {
const htmlPath = resolve(__dirname, 'src', 'index.ejs')
const isProduction = config.mode!== 'development'
const htmlWebpackPlugin = config.plugins.filter(plugin => plugin.constructor.name === 'HtmlWebpackPlugin')[0]
const defineWebpackPlugin = config.plugins.filter(plugin => plugin.constructor.name === 'DefinePlugin')[0]
const staticFrom = resolve(__dirname, 'src', 'static')
const staticTo = resolve(__dirname, 'dist', 'renderer')
const copyPlugin = new CopyPlugin({ patterns: [{ from: staticFrom, to: staticTo }], options: { concurrency: 200 } })
const cspGit = process.env.GIT_SRC ? 'https://raw.githubusercontent.com' : ''
const viewport = 'width=device-width, initial-scale=0.1, shrink-to-fit=no user-scalable=no'
const content = `default-src 'self'; script-src 'self' 'unsafe-inline'; img-src 'self' data: ${cspGit}; style-src 'self' 'unsafe-inline'`
const cspMeta = { 'http-equiv': 'Content-Security-Policy', content }
const xCspMeta = { 'http-equiv': 'X-Content-Security-Policy', content }
const htmlMeta = { charset: 'UTF-8', viewport, 'X-Content-Security-Policy': xCspMeta, 'Content-Security-Policy': cspMeta }
const lodashModules = ['omit', 'defaultsdeep', 'get', 'set', 'sortby'].map(method => `lodash.${method}`)
const whitelistedModules = ['react', 'react-dom', 'react-color', 'html2canvas', 'three'].concat(lodashModules)
const externals = config.externals.filter(externalModule => !whitelistedModules.includes(externalModule))
const replacedPlugins = ['HtmlWebpackPlugin', 'DefinePlugin']
const NODE_VERSION = `"${process.versions.node}"`
const CHROME_VERSION = `"${process.versions.chrome}"`
const ELECTRON_VERSION = `"${process.versions.electron ?? process.env.npm_package_devDependencies_electron}"`
const versions = {
'window.electron.versions.NODE_VERSION': NODE_VERSION,
'window.electron.versions.CHROME_VERSION': CHROME_VERSION,
'window.electron.versions.ELECTRON_VERSION': ELECTRON_VERSION,
'window.electron.versions.GIT_URL': `"${process.env.npm_package_repository_url.replace('git+', '')}"`,
'window.electron.versions.GIT_SRC': `"${process.env.GIT_SRC}"`
}
const definitions = { ...defineWebpackPlugin.definitions, ...versions }
const chunks = {
cacheGroups: {
vendor: {
test: /[\\\/]node_modules[\\\/]/,
name: 'vendors',
chunks: 'all'
},
styles: {
name: 'styles',
test: /\.css$/,
chunks: 'all',
enforce: true
}
}
}
set(config, 'devtool', 'nosources-source-map')
set(config, 'node', undefined)
set(config, 'output.libraryTarget', 'var')
set(config, 'target', 'web')
set(config, 'externals', externals)
set(config, 'optimization.splitChunks', chunks)
set(htmlWebpackPlugin, 'options.inject', 'body')
set(htmlWebpackPlugin, 'options.nodeModulePath', undefined)
set(htmlWebpackPlugin, 'options.template', resolve(__dirname, 'src', 'index.ejs'))
set(htmlWebpackPlugin, 'options.title', 'C-Alpacas')
set(htmlWebpackPlugin, 'options.filename', 'index.html')
set(htmlWebpackPlugin, 'options.meta', { ...htmlMeta, 'theme-color': '#fe9200' })
set(htmlWebpackPlugin, 'options.scriptLoading', 'defer')
set(htmlWebpackPlugin, 'options.base', '/')
set(htmlWebpackPlugin, 'options.minify', isProduction)
set(defineWebpackPlugin, 'definitions', definitions)
set(config, 'plugins', config.plugins.filter(plugin => !replacedPlugins.includes(plugin.constructor.name))
.concat([defineWebpackPlugin, htmlWebpackPlugin].concat(isProduction ? [copyPlugin] : [])))
console.log(isProduction, ' prod')
return config
}
function mainConfig (config) {
set(config, 'output.libraryTarget', 'umd')
return config
}
function webpackConfig (config) {
return config.target === 'electron-main' ? mainConfig(config) : rendererConfig(config)
}
module.exports = webpackConfig