-
Notifications
You must be signed in to change notification settings - Fork 0
/
webpack.config.js
104 lines (93 loc) · 2.58 KB
/
webpack.config.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
'use strict';
const {resolve, join} = require('path');
const webpack = require('webpack');
const merge = require('webpack-merge');
const {GenerateSW} = require('workbox-webpack-plugin');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const pkg = require('./package.json');
const moduleConf = require('./webpack-module.config');
const nomoduleConf = require('./webpack-nomodule.config');
const ENV = process.argv.find(arg => arg.includes('NODE_ENV=production')) ? 'production' : 'development';
const IS_DEV_SERVER = process.argv.find(arg => arg.includes('webpack-dev-server'));
const OUTPUT_PATH = IS_DEV_SERVER ? resolve('src') : resolve('dist');
const processEnv = {
NODE_ENV: JSON.stringify(ENV),
appVersion: JSON.stringify(pkg.version)
};
/**
* === Copy static files configuration
*/
const copyStatics = {
copyWebcomponents: [{
from: resolve('./node_modules/@webcomponents'),
to: join(OUTPUT_PATH, 'vendor/@webcomponents'),
flatten: false
}
],
copyOthers: [{
from: 'assets/**',
context: resolve('./src'),
to: OUTPUT_PATH
}, {
from: resolve('./src/index.html'),
to: OUTPUT_PATH,
flatten: true
}, {
from: resolve('./src/manifest.json'),
to: OUTPUT_PATH,
flatten: true
}]
};
/**
* Plugin configuration
*/
const sharedPlugins = [new webpack.DefinePlugin({'process.env': processEnv})];
const devPlugins = [new CopyWebpackPlugin(copyStatics.copyWebcomponents)];
const buildPlugins = [
new CopyWebpackPlugin(
[].concat(copyStatics.copyWebcomponents, copyStatics.copyOthers)
),
new GenerateSW({
globDirectory: OUTPUT_PATH,
globPatterns: ['**/!(*map*)'],
globIgnores: ['**/sw.js'],
swDest: join(OUTPUT_PATH, 'sw.js')
})
];
const plugins = sharedPlugins.concat(IS_DEV_SERVER ? devPlugins : buildPlugins);
const shared = env => {
const IS_MODULE_BUILD = env.BROWSERS === 'module';
return {
mode: ENV,
entry: './src/index.js',
output: {
path: OUTPUT_PATH,
filename: IS_MODULE_BUILD ? 'module.bundle.js' : 'bundle.js'
},
module: {
rules: [
{
test: /\.html$/,
use: ['text-loader']
},
{
test: /\.pcss$/,
use: ['text-loader', 'postcss-loader']
}
]
},
plugins,
devServer: {
contentBase: OUTPUT_PATH,
compress: true,
overlay: {
errors: true
},
historyApiFallback: true,
port: 3000,
host: 'localhost',
disableHostCheck: true
}
};
};
module.exports = (env = {}) => merge(env.BROWSERS === 'module' ? moduleConf() : nomoduleConf(), shared(env));