UNPKG

3.1 kBJavaScriptView Raw
1'use strict';
2
3var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
4
5var path = require('path');
6var fs = require('fs');
7
8var _ = require('lodash');
9var express = require('express');
10var ejs = require('ejs');
11var opener = require('opener');
12var mkdir = require('mkdirp');
13
14var _require = require('chalk'),
15 bold = _require.bold;
16
17var analyzer = require('./analyzer');
18
19var projectRoot = path.resolve(__dirname, '..');
20
21module.exports = {
22 startServer: startServer,
23 generateReport: generateReport,
24 // deprecated
25 start: startServer
26};
27
28function startServer(bundleStats, opts) {
29 opts = _extends({
30 port: 8888,
31 openBrowser: true,
32 bundleDir: null
33 }, opts);
34
35 var chartData = void 0;
36 try {
37 chartData = analyzer.getChartData(bundleStats, opts.bundleDir);
38 } catch (err) {
39 console.error('Could\'t analyze webpack bundle:\n' + err);
40 return;
41 }
42
43 var app = express();
44
45 app.set('view engine', 'ejs');
46 app.set('views', projectRoot + '/views');
47 app.use(express.static(projectRoot + '/client'));
48 app.use('/node_modules/filesize', express.static(require.resolve('filesize')));
49
50 app.use('/', function (req, res) {
51 res.render('viewer', {
52 mode: 'server',
53 chartData: JSON.stringify(chartData)
54 });
55 });
56
57 return app.listen(opts.port, function () {
58 var url = 'http://localhost:' + opts.port;
59
60 console.log(bold('Webpack Bundle Analyzer') + ' is started at ' + bold(url) + '\n' + ('Use ' + bold('Ctrl+C') + ' to close it'));
61
62 if (opts.openBrowser) {
63 opener(url);
64 }
65 });
66}
67
68function generateReport(bundleStats, opts) {
69 opts = _extends({
70 openBrowser: true,
71 reportFilename: 'report.html',
72 bundleDir: null
73 }, opts);
74
75 var chartData = void 0;
76 try {
77 chartData = analyzer.getChartData(bundleStats, opts.bundleDir);
78 } catch (err) {
79 console.error('Could\'t analyze webpack bundle:\n' + err);
80 return;
81 }
82
83 ejs.renderFile(projectRoot + '/views/viewer.ejs', {
84 mode: 'static',
85 chartData: JSON.stringify(chartData),
86 assetContent: getAssetContent
87 }, function (err, reportHtml) {
88 if (err) return console.error(err);
89
90 var reportFilepath = opts.reportFilename;
91
92 if (!path.isAbsolute(reportFilepath)) {
93 reportFilepath = path.resolve(opts.bundleDir || process.cwd(), reportFilepath);
94 }
95
96 mkdir.sync(path.dirname(reportFilepath));
97 fs.writeFileSync(reportFilepath, reportHtml);
98
99 console.log(bold('Webpack Bundle Analyzer') + ' saved report to ' + bold(reportFilepath) + '\n');
100
101 if (opts.openBrowser) {
102 opener('file://' + reportFilepath);
103 }
104 });
105}
106
107function getAssetContent(filename) {
108 var filepath = void 0;
109
110 if (_.startsWith(filename, 'node_modules/')) {
111 filepath = require.resolve(filename.slice('node_modules/'.length));
112 } else {
113 filepath = projectRoot + '/client/' + filename;
114 }
115
116 return fs.readFileSync(filepath, 'utf8');
117}
\No newline at end of file