webpack-bundle-analyzer 2.13.1 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +34 -0
- package/README.md +1 -1
- package/lib/BundleAnalyzerPlugin.js +109 -133
- package/lib/Logger.js +19 -75
- package/lib/analyzer.js +51 -77
- package/lib/bin/analyzer.js +32 -37
- package/lib/index.js +4 -3
- package/lib/parseUtils.js +50 -75
- package/lib/tree/BaseFolder.js +92 -101
- package/lib/tree/ConcatenatedModule.js +57 -90
- package/lib/tree/ContentFolder.js +29 -49
- package/lib/tree/ContentModule.js +27 -47
- package/lib/tree/Folder.js +49 -84
- package/lib/tree/Module.js +51 -77
- package/lib/tree/Node.js +18 -23
- package/lib/tree/utils.js +8 -16
- package/lib/utils.js +12 -17
- package/lib/viewer.js +96 -112
- package/package.json +47 -35
- package/public/viewer.js +40 -1
- package/public/viewer.js.map +1 -1
- package/src/BundleAnalyzerPlugin.js +2 -2
- package/src/analyzer.js +3 -2
- package/src/bin/analyzer.js +2 -2
- package/src/index.js +1 -1
- package/src/tree/BaseFolder.js +27 -1
- package/src/tree/ConcatenatedModule.js +5 -1
- package/src/tree/Folder.js +1 -1
- package/src/tree/Node.js +4 -0
- package/src/utils.js +2 -2
- package/src/viewer.js +5 -5
package/lib/tree/Module.js
CHANGED
|
@@ -1,101 +1,75 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.default = void 0;
|
|
6
7
|
|
|
7
|
-
var
|
|
8
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
8
9
|
|
|
9
|
-
var
|
|
10
|
+
var _gzipSize = _interopRequireDefault(require("gzip-size"));
|
|
10
11
|
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
var _gzipSize = require('gzip-size');
|
|
14
|
-
|
|
15
|
-
var _gzipSize2 = _interopRequireDefault(_gzipSize);
|
|
16
|
-
|
|
17
|
-
var _Node2 = require('./Node');
|
|
18
|
-
|
|
19
|
-
var _Node3 = _interopRequireDefault(_Node2);
|
|
12
|
+
var _Node = _interopRequireDefault(require("./Node"));
|
|
20
13
|
|
|
21
14
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
22
15
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
16
|
+
class Module extends _Node.default {
|
|
17
|
+
constructor(name, data, parent) {
|
|
18
|
+
super(name, parent);
|
|
19
|
+
this.data = data;
|
|
20
|
+
}
|
|
28
21
|
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
get src() {
|
|
23
|
+
return this.data.parsedSrc;
|
|
24
|
+
}
|
|
31
25
|
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
set src(value) {
|
|
27
|
+
this.data.parsedSrc = value;
|
|
28
|
+
delete this._gzipSize;
|
|
29
|
+
}
|
|
34
30
|
|
|
35
|
-
|
|
31
|
+
get size() {
|
|
32
|
+
return this.data.size;
|
|
33
|
+
}
|
|
36
34
|
|
|
37
|
-
|
|
38
|
-
|
|
35
|
+
set size(value) {
|
|
36
|
+
this.data.size = value;
|
|
39
37
|
}
|
|
40
38
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (data.size) {
|
|
45
|
-
this.size += data.size;
|
|
46
|
-
}
|
|
39
|
+
get parsedSize() {
|
|
40
|
+
return this.src ? this.src.length : undefined;
|
|
41
|
+
}
|
|
47
42
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
43
|
+
get gzipSize() {
|
|
44
|
+
if (!_lodash.default.has(this, '_gzipSize')) {
|
|
45
|
+
this._gzipSize = this.src ? _gzipSize.default.sync(this.src) : undefined;
|
|
51
46
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
statSize: this.size,
|
|
60
|
-
parsedSize: this.parsedSize,
|
|
61
|
-
gzipSize: this.gzipSize
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
}, {
|
|
65
|
-
key: 'src',
|
|
66
|
-
get: function get() {
|
|
67
|
-
return this.data.parsedSrc;
|
|
68
|
-
},
|
|
69
|
-
set: function set(value) {
|
|
70
|
-
this.data.parsedSrc = value;
|
|
71
|
-
delete this._gzipSize;
|
|
72
|
-
}
|
|
73
|
-
}, {
|
|
74
|
-
key: 'size',
|
|
75
|
-
get: function get() {
|
|
76
|
-
return this.data.size;
|
|
77
|
-
},
|
|
78
|
-
set: function set(value) {
|
|
79
|
-
this.data.size = value;
|
|
80
|
-
}
|
|
81
|
-
}, {
|
|
82
|
-
key: 'parsedSize',
|
|
83
|
-
get: function get() {
|
|
84
|
-
return this.src ? this.src.length : undefined;
|
|
47
|
+
|
|
48
|
+
return this._gzipSize;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
mergeData(data) {
|
|
52
|
+
if (data.size) {
|
|
53
|
+
this.size += data.size;
|
|
85
54
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (!_lodash2.default.has(this, '_gzipSize')) {
|
|
90
|
-
this._gzipSize = this.src ? _gzipSize2.default.sync(this.src) : undefined;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
return this._gzipSize;
|
|
55
|
+
|
|
56
|
+
if (data.parsedSrc) {
|
|
57
|
+
this.src = (this.src || '') + data.parsedSrc;
|
|
94
58
|
}
|
|
95
|
-
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
toChartData() {
|
|
62
|
+
return {
|
|
63
|
+
id: this.data.id,
|
|
64
|
+
label: this.name,
|
|
65
|
+
path: this.path,
|
|
66
|
+
statSize: this.size,
|
|
67
|
+
parsedSize: this.parsedSize,
|
|
68
|
+
gzipSize: this.gzipSize
|
|
69
|
+
};
|
|
70
|
+
}
|
|
96
71
|
|
|
97
|
-
|
|
98
|
-
}(_Node3.default);
|
|
72
|
+
}
|
|
99
73
|
|
|
100
74
|
exports.default = Module;
|
|
101
75
|
;
|
package/lib/tree/Node.js
CHANGED
|
@@ -1,38 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.default = void 0;
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
10
|
-
|
|
11
|
-
var Node = function () {
|
|
12
|
-
function Node(name, parent) {
|
|
13
|
-
_classCallCheck(this, Node);
|
|
14
|
-
|
|
8
|
+
class Node {
|
|
9
|
+
constructor(name, parent) {
|
|
15
10
|
this.name = name;
|
|
16
11
|
this.parent = parent;
|
|
17
12
|
}
|
|
18
13
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var path = [];
|
|
23
|
-
var node = this;
|
|
24
|
-
|
|
25
|
-
while (node) {
|
|
26
|
-
path.push(node.name);
|
|
27
|
-
node = node.parent;
|
|
28
|
-
}
|
|
14
|
+
get path() {
|
|
15
|
+
const path = [];
|
|
16
|
+
let node = this;
|
|
29
17
|
|
|
30
|
-
|
|
18
|
+
while (node) {
|
|
19
|
+
path.push(node.name);
|
|
20
|
+
node = node.parent;
|
|
31
21
|
}
|
|
32
|
-
}]);
|
|
33
22
|
|
|
34
|
-
|
|
35
|
-
}
|
|
23
|
+
return path.reverse().join('/');
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
get isRoot() {
|
|
27
|
+
return !this.parent;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
}
|
|
36
31
|
|
|
37
32
|
exports.default = Node;
|
|
38
33
|
;
|
package/lib/tree/utils.js
CHANGED
|
@@ -1,34 +1,26 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.getModulePathParts = getModulePathParts;
|
|
7
7
|
|
|
8
|
-
var _lodash = require(
|
|
9
|
-
|
|
10
|
-
var _lodash2 = _interopRequireDefault(_lodash);
|
|
8
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
11
9
|
|
|
12
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
11
|
|
|
14
|
-
|
|
12
|
+
const MULTI_MODULE_REGEXP = /^multi /;
|
|
15
13
|
|
|
16
14
|
function getModulePathParts(moduleData) {
|
|
17
15
|
if (MULTI_MODULE_REGEXP.test(moduleData.identifier)) {
|
|
18
16
|
return [moduleData.identifier];
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
|
|
22
|
-
//
|
|
23
|
-
.
|
|
24
|
-
//
|
|
25
|
-
.
|
|
26
|
-
// Removing first `.`
|
|
27
|
-
.slice(1)
|
|
28
|
-
// Replacing `~` with `node_modules`
|
|
29
|
-
.map(function (part) {
|
|
30
|
-
return part === '~' ? 'node_modules' : part;
|
|
31
|
-
});
|
|
19
|
+
const parsedPath = _lodash.default // Removing loaders from module path: they're joined by `!` and the last part is a raw module path
|
|
20
|
+
.last(moduleData.name.split('!')) // Splitting module path into parts
|
|
21
|
+
.split('/') // Removing first `.`
|
|
22
|
+
.slice(1) // Replacing `~` with `node_modules`
|
|
23
|
+
.map(part => part === '~' ? 'node_modules' : part);
|
|
32
24
|
|
|
33
25
|
return parsedPath.length ? parsedPath : null;
|
|
34
26
|
}
|
package/lib/utils.js
CHANGED
|
@@ -1,40 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const {
|
|
4
|
+
inspect
|
|
5
|
+
} = require('util');
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
const _ = require('lodash');
|
|
7
8
|
|
|
8
9
|
exports.createAssetsFilter = createAssetsFilter;
|
|
9
10
|
|
|
10
11
|
function createAssetsFilter(excludePatterns) {
|
|
11
|
-
|
|
12
|
+
const excludeFunctions = _(excludePatterns).castArray().compact().map(pattern => {
|
|
12
13
|
if (typeof pattern === 'string') {
|
|
13
14
|
pattern = new RegExp(pattern);
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
if (_.isRegExp(pattern)) {
|
|
17
|
-
return
|
|
18
|
-
return pattern.test(asset);
|
|
19
|
-
};
|
|
18
|
+
return asset => pattern.test(asset);
|
|
20
19
|
}
|
|
21
20
|
|
|
22
21
|
if (!_.isFunction(pattern)) {
|
|
23
|
-
throw new TypeError(`Pattern should be either string, RegExp or a function, but "${inspect(pattern, {
|
|
22
|
+
throw new TypeError(`Pattern should be either string, RegExp or a function, but "${inspect(pattern, {
|
|
23
|
+
depth: 0
|
|
24
|
+
})}" got.`);
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
return pattern;
|
|
27
28
|
}).value();
|
|
28
29
|
|
|
29
30
|
if (excludeFunctions.length) {
|
|
30
|
-
return
|
|
31
|
-
return _.every(excludeFunctions, function (fn) {
|
|
32
|
-
return fn(asset) !== true;
|
|
33
|
-
});
|
|
34
|
-
};
|
|
31
|
+
return asset => _.every(excludeFunctions, fn => fn(asset) !== true);
|
|
35
32
|
} else {
|
|
36
|
-
return
|
|
37
|
-
return true;
|
|
38
|
-
};
|
|
33
|
+
return () => true;
|
|
39
34
|
}
|
|
40
35
|
}
|
package/lib/viewer.js
CHANGED
|
@@ -1,56 +1,87 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
var startServer = function () {
|
|
4
|
-
var _ref = _asyncToGenerator(function* (bundleStats, opts) {
|
|
5
|
-
var _ref2 = opts || {},
|
|
6
|
-
_ref2$port = _ref2.port,
|
|
7
|
-
port = _ref2$port === undefined ? 8888 : _ref2$port,
|
|
8
|
-
_ref2$host = _ref2.host,
|
|
9
|
-
host = _ref2$host === undefined ? '127.0.0.1' : _ref2$host,
|
|
10
|
-
_ref2$openBrowser = _ref2.openBrowser,
|
|
11
|
-
openBrowser = _ref2$openBrowser === undefined ? true : _ref2$openBrowser,
|
|
12
|
-
_ref2$bundleDir = _ref2.bundleDir,
|
|
13
|
-
bundleDir = _ref2$bundleDir === undefined ? null : _ref2$bundleDir,
|
|
14
|
-
_ref2$logger = _ref2.logger,
|
|
15
|
-
logger = _ref2$logger === undefined ? new Logger() : _ref2$logger,
|
|
16
|
-
_ref2$defaultSizes = _ref2.defaultSizes,
|
|
17
|
-
defaultSizes = _ref2$defaultSizes === undefined ? 'parsed' : _ref2$defaultSizes,
|
|
18
|
-
_ref2$excludeAssets = _ref2.excludeAssets,
|
|
19
|
-
excludeAssets = _ref2$excludeAssets === undefined ? null : _ref2$excludeAssets;
|
|
20
|
-
|
|
21
|
-
var analyzerOpts = { logger, excludeAssets };
|
|
22
|
-
|
|
23
|
-
var chartData = getChartData(analyzerOpts, bundleStats, bundleDir);
|
|
1
|
+
"use strict";
|
|
24
2
|
|
|
25
|
-
|
|
3
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
|
+
|
|
5
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
6
|
+
|
|
7
|
+
const path = require('path');
|
|
8
|
+
|
|
9
|
+
const fs = require('fs');
|
|
10
|
+
|
|
11
|
+
const http = require('http');
|
|
12
|
+
|
|
13
|
+
const WebSocket = require('ws');
|
|
14
|
+
|
|
15
|
+
const _ = require('lodash');
|
|
16
|
+
|
|
17
|
+
const express = require('express');
|
|
18
|
+
|
|
19
|
+
const ejs = require('ejs');
|
|
20
|
+
|
|
21
|
+
const opener = require('opener');
|
|
22
|
+
|
|
23
|
+
const mkdir = require('mkdirp');
|
|
24
|
+
|
|
25
|
+
const {
|
|
26
|
+
bold
|
|
27
|
+
} = require('chalk');
|
|
28
|
+
|
|
29
|
+
const Logger = require('./Logger');
|
|
30
|
+
|
|
31
|
+
const analyzer = require('./analyzer');
|
|
32
|
+
|
|
33
|
+
const projectRoot = path.resolve(__dirname, '..');
|
|
34
|
+
module.exports = {
|
|
35
|
+
startServer,
|
|
36
|
+
generateReport,
|
|
37
|
+
// deprecated
|
|
38
|
+
start: startServer
|
|
39
|
+
};
|
|
26
40
|
|
|
27
|
-
|
|
41
|
+
function startServer(_x, _x2) {
|
|
42
|
+
return _startServer.apply(this, arguments);
|
|
43
|
+
}
|
|
28
44
|
|
|
29
|
-
|
|
45
|
+
function _startServer() {
|
|
46
|
+
_startServer = _asyncToGenerator(function* (bundleStats, opts) {
|
|
47
|
+
const {
|
|
48
|
+
port = 8888,
|
|
49
|
+
host = '127.0.0.1',
|
|
50
|
+
openBrowser = true,
|
|
51
|
+
bundleDir = null,
|
|
52
|
+
logger = new Logger(),
|
|
53
|
+
defaultSizes = 'parsed',
|
|
54
|
+
excludeAssets = null
|
|
55
|
+
} = opts || {};
|
|
56
|
+
const analyzerOpts = {
|
|
57
|
+
logger,
|
|
58
|
+
excludeAssets
|
|
59
|
+
};
|
|
60
|
+
let chartData = getChartData(analyzerOpts, bundleStats, bundleDir);
|
|
61
|
+
if (!chartData) return;
|
|
62
|
+
const app = express(); // Explicitly using our `ejs` dependency to render templates
|
|
30
63
|
// Fixes #17
|
|
64
|
+
|
|
31
65
|
app.engine('ejs', require('ejs').renderFile);
|
|
32
66
|
app.set('view engine', 'ejs');
|
|
33
67
|
app.set('views', `${projectRoot}/views`);
|
|
34
68
|
app.use(express.static(`${projectRoot}/public`));
|
|
35
|
-
|
|
36
|
-
app.use('/', function (req, res) {
|
|
69
|
+
app.use('/', (req, res) => {
|
|
37
70
|
res.render('viewer', {
|
|
38
71
|
mode: 'server',
|
|
72
|
+
|
|
39
73
|
get chartData() {
|
|
40
74
|
return JSON.stringify(chartData);
|
|
41
75
|
},
|
|
76
|
+
|
|
42
77
|
defaultSizes: JSON.stringify(defaultSizes)
|
|
43
78
|
});
|
|
44
79
|
});
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
yield new Promise(function (resolve) {
|
|
49
|
-
server.listen(port, host, function () {
|
|
80
|
+
const server = http.createServer(app);
|
|
81
|
+
yield new Promise(resolve => {
|
|
82
|
+
server.listen(port, host, () => {
|
|
50
83
|
resolve();
|
|
51
|
-
|
|
52
|
-
var url = `http://${host}:${server.address().port}`;
|
|
53
|
-
|
|
84
|
+
const url = `http://${host}:${server.address().port}`;
|
|
54
85
|
logger.info(`${bold('Webpack Bundle Analyzer')} is started at ${bold(url)}\n` + `Use ${bold('Ctrl+C')} to close it`);
|
|
55
86
|
|
|
56
87
|
if (openBrowser) {
|
|
@@ -58,18 +89,16 @@ var startServer = function () {
|
|
|
58
89
|
}
|
|
59
90
|
});
|
|
60
91
|
});
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
wss.on('connection',
|
|
65
|
-
ws.on('error',
|
|
92
|
+
const wss = new WebSocket.Server({
|
|
93
|
+
server
|
|
94
|
+
});
|
|
95
|
+
wss.on('connection', ws => {
|
|
96
|
+
ws.on('error', err => {
|
|
66
97
|
// Ignore network errors like `ECONNRESET`, `EPIPE`, etc.
|
|
67
98
|
if (err.errno) return;
|
|
68
|
-
|
|
69
99
|
logger.info(err.message);
|
|
70
100
|
});
|
|
71
101
|
});
|
|
72
|
-
|
|
73
102
|
return {
|
|
74
103
|
ws: wss,
|
|
75
104
|
http: server,
|
|
@@ -77,13 +106,10 @@ var startServer = function () {
|
|
|
77
106
|
};
|
|
78
107
|
|
|
79
108
|
function updateChartData(bundleStats) {
|
|
80
|
-
|
|
81
|
-
|
|
109
|
+
const newChartData = getChartData(analyzerOpts, bundleStats, bundleDir);
|
|
82
110
|
if (!newChartData) return;
|
|
83
|
-
|
|
84
111
|
chartData = newChartData;
|
|
85
|
-
|
|
86
|
-
wss.clients.forEach(function (client) {
|
|
112
|
+
wss.clients.forEach(client => {
|
|
87
113
|
if (client.readyState === WebSocket.OPEN) {
|
|
88
114
|
client.send(JSON.stringify({
|
|
89
115
|
event: 'chartDataUpdated',
|
|
@@ -93,72 +119,33 @@ var startServer = function () {
|
|
|
93
119
|
});
|
|
94
120
|
}
|
|
95
121
|
});
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
return _ref.apply(this, arguments);
|
|
99
|
-
};
|
|
100
|
-
}();
|
|
101
|
-
|
|
102
|
-
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
|
|
103
|
-
|
|
104
|
-
var path = require('path');
|
|
105
|
-
var fs = require('fs');
|
|
106
|
-
var http = require('http');
|
|
107
|
-
|
|
108
|
-
var WebSocket = require('ws');
|
|
109
|
-
var _ = require('lodash');
|
|
110
|
-
var express = require('express');
|
|
111
|
-
var ejs = require('ejs');
|
|
112
|
-
var opener = require('opener');
|
|
113
|
-
var mkdir = require('mkdirp');
|
|
114
|
-
|
|
115
|
-
var _require = require('chalk'),
|
|
116
|
-
bold = _require.bold;
|
|
117
|
-
|
|
118
|
-
var Logger = require('./Logger');
|
|
119
|
-
var analyzer = require('./analyzer');
|
|
120
|
-
|
|
121
|
-
var projectRoot = path.resolve(__dirname, '..');
|
|
122
|
-
|
|
123
|
-
module.exports = {
|
|
124
|
-
startServer,
|
|
125
|
-
generateReport,
|
|
126
|
-
// deprecated
|
|
127
|
-
start: startServer
|
|
128
|
-
};
|
|
122
|
+
return _startServer.apply(this, arguments);
|
|
123
|
+
}
|
|
129
124
|
|
|
130
125
|
function generateReport(bundleStats, opts) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
excludeAssets = _ref3$excludeAssets === undefined ? null : _ref3$excludeAssets;
|
|
144
|
-
|
|
145
|
-
var chartData = getChartData({ logger, excludeAssets }, bundleStats, bundleDir);
|
|
146
|
-
|
|
126
|
+
const {
|
|
127
|
+
openBrowser = true,
|
|
128
|
+
reportFilename = 'report.html',
|
|
129
|
+
bundleDir = null,
|
|
130
|
+
logger = new Logger(),
|
|
131
|
+
defaultSizes = 'parsed',
|
|
132
|
+
excludeAssets = null
|
|
133
|
+
} = opts || {};
|
|
134
|
+
const chartData = getChartData({
|
|
135
|
+
logger,
|
|
136
|
+
excludeAssets
|
|
137
|
+
}, bundleStats, bundleDir);
|
|
147
138
|
if (!chartData) return;
|
|
148
|
-
|
|
149
139
|
ejs.renderFile(`${projectRoot}/views/viewer.ejs`, {
|
|
150
140
|
mode: 'static',
|
|
151
141
|
chartData: JSON.stringify(chartData),
|
|
152
142
|
assetContent: getAssetContent,
|
|
153
143
|
defaultSizes: JSON.stringify(defaultSizes)
|
|
154
|
-
},
|
|
144
|
+
}, (err, reportHtml) => {
|
|
155
145
|
if (err) return logger.error(err);
|
|
156
|
-
|
|
157
|
-
var reportFilepath = path.resolve(bundleDir || process.cwd(), reportFilename);
|
|
158
|
-
|
|
146
|
+
const reportFilepath = path.resolve(bundleDir || process.cwd(), reportFilename);
|
|
159
147
|
mkdir.sync(path.dirname(reportFilepath));
|
|
160
148
|
fs.writeFileSync(reportFilepath, reportHtml);
|
|
161
|
-
|
|
162
149
|
logger.info(`${bold('Webpack Bundle Analyzer')} saved report to ${bold(reportFilepath)}`);
|
|
163
150
|
|
|
164
151
|
if (openBrowser) {
|
|
@@ -171,17 +158,14 @@ function getAssetContent(filename) {
|
|
|
171
158
|
return fs.readFileSync(`${projectRoot}/public/${filename}`, 'utf8');
|
|
172
159
|
}
|
|
173
160
|
|
|
174
|
-
function getChartData(analyzerOpts) {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
161
|
+
function getChartData(analyzerOpts, ...args) {
|
|
162
|
+
let chartData;
|
|
163
|
+
const {
|
|
164
|
+
logger
|
|
165
|
+
} = analyzerOpts;
|
|
178
166
|
|
|
179
167
|
try {
|
|
180
|
-
|
|
181
|
-
args[_key - 1] = arguments[_key];
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
chartData = analyzer.getViewerData.apply(analyzer, args.concat([analyzerOpts]));
|
|
168
|
+
chartData = analyzer.getViewerData(...args, analyzerOpts);
|
|
185
169
|
} catch (err) {
|
|
186
170
|
logger.error(`Could't analyze webpack bundle:\n${err}`);
|
|
187
171
|
logger.debug(err.stack);
|