Skip to content
This repository was archived by the owner on Dec 5, 2024. It is now read-only.

Commit 98bd75e

Browse files
committed
feat(build): update log ui
1 parent 472079b commit 98bd75e

File tree

9 files changed

+1644
-158
lines changed

9 files changed

+1644
-158
lines changed

packages/fusuma/package-lock.json

+1,585-132
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/fusuma/package.json

-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@
4141
"babel-plugin-prismjs": "^2.0.1",
4242
"caporal": "^1.4.0",
4343
"chalk": "^4.1.0",
44-
"child-process-promise": "^2.2.1",
4544
"compression-webpack-plugin": "^7.1.2",
4645
"core-js": "^3.8.3",
4746
"css-loader": "^5.0.1",
@@ -71,7 +70,6 @@
7170
"regenerator-runtime": "^0.13.7",
7271
"rmfr": "^2.0.0",
7372
"style-loader": "^2.0.0",
74-
"table": "^6.0.7",
7573
"terser-webpack-plugin": "^5.1.1",
7674
"webp-loader": "^0.6.0",
7775
"webpack": "^5.17.0",

packages/fusuma/src/tasks/build.js

+8-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const getRemoteOriginUrl = require('../utils/getRemoteOriginUrl');
77
const { build: webpackBuild } = require('../webpack');
88
const deleteDir = require('../utils/deleteDir');
99
const fileServer = require('../server/fileServer');
10+
const outputBuildInfo = require('../webpack/outputBuildInfo');
1011

1112
async function createOgImage(outputDirPath, publicPath) {
1213
const puppeteer = require('puppeteer');
@@ -58,7 +59,8 @@ async function build(config, isConsoleOutput = true) {
5859
config.build.useCache = false;
5960

6061
await deleteDir(outputDirPath);
61-
await webpackBuild(config, isConsoleOutput, (type) => {
62+
63+
const stats = await webpackBuild(config, (type) => {
6264
if (type === 'start-ssr') {
6365
spinner.setContent({ color: 'cyan', text: 'Rendering components to HTML...' });
6466
}
@@ -77,6 +79,11 @@ async function build(config, isConsoleOutput = true) {
7779
}
7880

7981
spinner.stop();
82+
83+
if (isConsoleOutput) {
84+
outputBuildInfo(stats);
85+
}
86+
8087
info('build', 'Completed!');
8188
}
8289

packages/fusuma/src/tasks/deploy.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
'use strict';
22

3+
const ghpages = require('gh-pages');
34
const Spinner = require('../cli/Spinner');
45
const { info } = require('../cli/log');
56

67
async function deploy(config, options = {}) {
7-
const ghpages = require('gh-pages');
8-
98
return new Promise((resolve, reject) => {
109
const spinner = new Spinner();
1110
const { outputDirPath } = config.internal;

packages/fusuma/src/utils/lazyloadModule.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
'use strict';
22

3-
async function lazyload(pack, cb) {
4-
const { spawn } = require('child-process-promise');
3+
const util = require('util');
4+
const spawn = util.promisify(require('child_process').spawn);
55

6+
async function lazyload(pack, cb) {
67
try {
78
return require(pack);
89
} catch (e) {

packages/fusuma/src/webpack/index.js

+3-8
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,17 @@
11
'use strict';
22

3-
const combineConfig = require('./webpack.config');
4-
53
async function start(config) {
4+
const combineConfig = require('./webpack.config');
65
const server = require('../server');
76

87
await server(combineConfig('development', config), config);
98
}
109

11-
async function build(config, isConsoleOutput = true, cb) {
10+
async function build(config, cb) {
1211
const buildTask = require('./build');
1312
const stats = await buildTask(config, cb);
1413

15-
if (isConsoleOutput) {
16-
const outputBuildInfo = require('./outputBuildInfo');
17-
18-
outputBuildInfo(stats);
19-
}
14+
return stats;
2015
}
2116

2217
module.exports = {
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,53 @@
11
'use strict';
22

3-
const { table, getBorderCharacters } = require('table');
3+
const chalk = require('chalk');
44
const humanSize = require('human-size');
55

66
function outputBuildInfo(res) {
7-
const output = [];
8-
const options = {
9-
border: getBorderCharacters('void'),
10-
};
7+
let totalSize = 0;
118

12-
Object.entries(res.compilation.assets).forEach(([name, asset]) => {
13-
output.push([name, humanSize(asset.size())]);
9+
const assets = Object.entries(res.compilation.assets).map(([name, asset]) => {
10+
const size = asset.size();
11+
12+
totalSize += size;
13+
14+
return {
15+
name,
16+
size,
17+
};
18+
});
19+
20+
assets.sort((a, b) => {
21+
return b.size - a.size;
22+
});
23+
24+
assets.forEach(({ name, size }) => {
25+
let filename = name;
26+
const fileSize = chalk.greenBright(humanSize(size));
27+
28+
if (name.includes('.js')) {
29+
if (assets.some(({ name }) => name === `${filename}.gz`) || name.includes('.LICENSE')) {
30+
filename = chalk.gray(name);
31+
} else {
32+
filename = chalk.yellow(name);
33+
}
34+
} else if (name.includes('.css')) {
35+
if (assets.some(({ name }) => name === `${filename}.gz`)) {
36+
filename = chalk.gray(name);
37+
} else {
38+
filename = chalk.blue(name);
39+
}
40+
} else if (name.includes('.html')) {
41+
filename = chalk.redBright(name);
42+
} else if (name.includes('.webp')) {
43+
filename = chalk.magenta(name);
44+
}
45+
46+
console.log(filename, fileSize);
1447
});
1548

1649
console.log();
17-
console.log(table([['name', 'size'], ...output], options));
50+
console.log('Total:', chalk.greenBright(humanSize(totalSize)));
1851
}
1952

2053
module.exports = outputBuildInfo;

packages/fusuma/src/webpack/webpack.prod.config.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@ function prod() {
1111
mode: 'production',
1212
output: {
1313
filename: '[name].[chunkhash].bundle.js',
14-
chunkFilename: '[name].[id].[chunkhash].bundle.js',
14+
chunkFilename: '[name].[chunkhash].bundle.js',
1515
},
1616
module: {
1717
rules: [css('prod')],
1818
},
1919
plugins: [
2020
new MiniCssExtractPlugin({
2121
filename: '[name].[chunkhash].css',
22-
chunkFilename: '[name].[id].[chunkhash].css',
22+
chunkFilename: '[name].[chunkhash].css',
2323
}),
2424
// github pages doesn't support brotli
2525
new CompressionPlugin({

samples/debug/.fusumarc.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ meta:
66
siteName: hiroppy.me
77
sns: ['twitter']
88
slide:
9-
loop: true
9+
loop: false
1010
sidebar: true
1111
targetBlank: true
1212
showIndex: true

0 commit comments

Comments
 (0)