/
webpack.config.js
109 lines (105 loc) · 3.35 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
105
106
107
108
109
const path = require("path");
const webpack = require("webpack");
const BundleAnalyzerPlugin = require("webpack-bundle-analyzer")
.BundleAnalyzerPlugin;
const shimJS = path.resolve(__dirname, "src", "emptyshim.js");
function shim(regExp) {
return new webpack.NormalModuleReplacementPlugin(regExp, shimJS);
}
const pkg = require("./package.json");
module.exports = {
devtool: "source-map",
entry: ["./src/index.js"],
output: {
filename: "index.js",
path: path.resolve(__dirname, "lib"),
publicPath: "https://unpkg.com/thebelab@" + pkg.version + "/lib/",
},
plugins: [
// Not using moment
shim(/moment/),
// Don't need vim keymap
shim(/codemirror\/keymap\/vim/),
shim(/codemirror\/addon\/search/),
// shim out some unused packages
shim(/elliptic/),
shim(/bn\.js/),
shim(/readable\-stream/),
// shim(/@phosphor\/coreutils\/lib\/random/),
// shim out some unused phosphor
shim(
/@phosphor\/widgets\/lib\/(commandpalette|box|dock|grid|menu|scroll|split|stacked|tab).*/
),
shim(/@phosphor\/(dragdrop|commands).*/),
// unused @jupyterlab
shim(/@jupyterlab\/apputils/),
// shim(/@jupyterlab\/apputils\/lib\/(clientsession|dialog|mainmenu|instancetracker|sanitizer|toolbar)/),
// shim(/@jupyterlab\/apputils\/style\/.*/),
// JupyterLab's codemirror package is also big,
// but not so trival to shim
// shim(/@jupyterlab\/codemirror\/lib\/editor/),
shim(/@jupyterlab\/codeeditor\/lib\/jsoneditor/),
shim(/@jupyterlab\/coreutils\/lib\/(time|settingregistry|.*menu.*)/),
shim(/@jupyterlab\/services\/lib\/(contents|terminal)\/.*/),
new BundleAnalyzerPlugin({
analyzerMode: "static",
openAnalyzer: false,
reportFilename: "../webpack.stats.html",
}),
],
optimization: {},
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: "babel-loader",
options: {
cacheDirectory: true,
presets: [
[
"@babel/preset-env",
{
useBuiltIns: "usage",
corejs: 3,
shippedProposals: true,
targets: {
browsers: [
"chrome 60",
"edge 15",
"firefox 45",
"safari 10",
],
},
},
],
],
},
},
},
{ test: /\.css$/, loader: "style-loader!css-loader" },
{ test: /\.html$/, loader: "file-loader" },
// jquery-ui loads some images
{ test: /\.(jpg|png|gif)$/, loader: "file-loader" },
// required to load font-awesome
{
test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
loader: "url-loader?limit=10000&mimetype=application/font-woff",
},
{
test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
loader: "url-loader?limit=10000&mimetype=application/font-woff",
},
{
test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
loader: "url-loader?limit=10000&mimetype=application/octet-stream",
},
{ test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: "file-loader" },
{
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
loader: "url-loader?limit=10000&mimetype=image/svg+xml",
},
],
},
};