This repository was archived by the owner on Mar 23, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathwebpack.config.js
More file actions
114 lines (105 loc) · 2.96 KB
/
Copy pathwebpack.config.js
File metadata and controls
114 lines (105 loc) · 2.96 KB
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
105
106
107
108
109
110
111
112
113
114
'use strict';
const {resolve, join} = require('path');
const webpack = require('webpack');
const merge = require('webpack-merge');
const WorkboxPlugin = 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.env.NODE_ENV;
const IS_DEV = process.argv.find(arg => arg.includes('webpack-dev-server'));
const IS_MODULE_BUILD = process.env.BROWSERS === 'module';
const OUTPUT_PATH = IS_DEV ? 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/webcomponentsjs/webcomponents-loader.js'),
to: join(OUTPUT_PATH, 'vendor'),
flatten: true
}, {
from: resolve('./node_modules/@webcomponents/webcomponentsjs/webcomponents-lite.js'),
to: join(OUTPUT_PATH, 'vendor'),
flatten: true
}, {
from: resolve('./node_modules/@webcomponents/webcomponentsjs/webcomponents-sd-ce.js'),
to: join(OUTPUT_PATH, 'vendor'),
flatten: true
}, {
from: resolve('./node_modules/@webcomponents/webcomponentsjs/webcomponents-hi-sd-ce.js'),
to: join(OUTPUT_PATH, 'vendor'),
flatten: true
}, {
from: resolve('./node_modules/@webcomponents/webcomponentsjs/custom-elements-es5-adapter.js'),
to: join(OUTPUT_PATH, 'vendor'),
flatten: true
}],
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 plugins = IS_DEV ? [
new CopyWebpackPlugin(copyStatics.copyWebcomponents),
new webpack.DefinePlugin({'process.env': processEnv})
] : [
new WorkboxPlugin({
globDirectory: OUTPUT_PATH,
globPatterns: ['**/*.{html, js, css, svg, png, woff, woff2, ttf}'],
swDest: join(OUTPUT_PATH, 'sw.js')
}),
new CopyWebpackPlugin(
[].concat(copyStatics.copyWebcomponents, copyStatics.copyOthers)
),
new webpack.DefinePlugin({'process.env': processEnv})
];
const SHARED = {
entry: './src/index.js',
devtool: 'cheap-module-source-map',
output: {
path: OUTPUT_PATH,
filename: IS_MODULE_BUILD ? 'module.bundle.js' : 'bundle.js'
},
module: {
rules: [
{
test: /\.html$/,
use: ['text-loader']
},
{
test: /\.postcss$/,
use: ['text-loader', 'postcss-loader']
}
]
},
plugins,
devServer: {
contentBase: OUTPUT_PATH,
compress: true,
overlay: {
errors: true
},
port: 3000,
host: '0.0.0.0',
disableHostCheck: true
}
};
module.exports = merge(IS_MODULE_BUILD ? moduleConf : nomoduleConf, SHARED);