-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathwebpackbuild.js
132 lines (114 loc) · 2.69 KB
/
webpackbuild.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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
const process = require("process")
let noNative = process.argv.includes("noNative")
const webpack = require('webpack');
let entry = {
"packages/index.js": "./src/index.js",
"packages/allPages.js": "./src/allPages/allPages.js",
"packages/writeupmaker.js": "./resources/writeupmaker.js",
"packages/map.js": "./map.js",
"packages/favorites.js": "./favorites.js",
"packagedsw.js": "./sw.js",
}
if (!noNative) {
entry["native/packages/index.js"] = "./native/index.js"
}
let config = {
mode: "production", //Build for production
entry,
target: "web",
devtool: "source-map",
optimization: {
minimize: false //Consider using Uglify.js for minification.
//https://github.com/mishoo/UglifyJS2/blob/ae67a4985073dcdaa2788c86e576202923514e0d/README.md#uglify-fast-minify-mode
},
output: {
path: __dirname,
filename: "[name]",
},
plugins: [
new webpack.optimize.LimitChunkCountPlugin({
maxChunks: 1 //Prevent chunking.
})
],
stats: {
colors: true
},
cache: {
type: 'memory',
cacheUnaffected: true,
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
cacheDirectory: true, //Huge performance boost. Avoid recompiling when unneeded.
cacheCompression: true, //true is default. Compress cached data written to disk.
sourceType: 'unambiguous', //Allow mixing CommonJS and ES6 modules.
presets: [
[
"@babel/preset-env",
{
"useBuiltIns": "usage",
"corejs": {
"version": 3,
"proposals": true
}
}
]
]
}
}
}
]
}
}
let compiler = webpack(config);
config.optimization.minimize = true
let minimizingCompiler = webpack(config);
function compilerCallback(err, stats) {
if (err) {
console.error(err.stack || err);
if (err.details) {
console.error(err.details);
}
return;
}
const info = stats.toJson();
if (stats.hasErrors()) {
console.error(info.errors.join(""));
}
if (stats.hasWarnings()) {
console.warn(info.warnings.join(""));
}
// Log result...
console.log(
stats.toString({
chunks: false, // Makes the build much quieter
colors: true // Add console colors
})
);
}
function run(compilerToRun) {
return new Promise((resolve, reject) => {
compilerToRun.run(function(...args) {
compilerCallback(...args)
compilerToRun.close((closeErr) => {
if (closeErr === null) {resolve()}
reject(closeErr)
});
})
})
}
function runProd() {return run(minimizingCompiler)}
function runDev() {return run(compiler)}
function watchDev() {
compiler.watch({
aggregateTimeout: 100,
ignored: /node_modules/
}, compilerCallback)
}
module.exports = {runProd, runDev, watchDev}