Skip to content

Commit e804e51

Browse files
committed
perf: decrease bundle size of entry point (#117)
* chore: remove unnecessary files from output package * refactor: decrease bundle size of date-fns * refactor: lazy load export-pdf.command.ts * chore: fix tree shake not work * perf: load form-data and mime lazily
1 parent 0d048f1 commit e804e51

16 files changed

+271
-179
lines changed

.vscodeignore

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,18 @@ node_modules/**
55
src/**
66
.gitignore
77
.yarnrc
8-
webpack.config.js
98
vsc-extension-quickstart.md
109
**/tsconfig.json
10+
**/tsconfig.*.json
1111
**/.eslintrc.json
1212
**/*.map
1313
**/*.ts
1414
.idea
1515
.github
1616
ui/**
17+
test/**
18+
*.mjs
19+
*.js
20+
*.sh
21+
.prettierignore
22+

package-lock.json

Lines changed: 213 additions & 148 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,21 +1015,19 @@
10151015
]
10161016
},
10171017
"scripts": {
1018-
"compile": "webpack && npm run ui:compile",
1019-
"ui:compile": "webpack -c ./ui/webpack.config.mjs",
1020-
"watch": "webpack --watch",
1018+
"watch": "webpack --watch --mode=development",
10211019
"ui:watch": "webpack watch -c ./ui/webpack.config.mjs",
10221020
"package": "webpack --mode production --devtool hidden-source-map",
10231021
"ui:package": "webpack --mode production --devtool hidden-source-map -c ./ui/webpack.config.mjs",
10241022
"compile-tests": "tsc -p ./tsconfig.integration.json --outDir out",
10251023
"test:integration:watch": "npm run compile-tests -- --watch",
10261024
"test:integration": "npm run compile-tests && node ./out/test/runTest.js",
10271025
"test:unit": "jest -c ./test/jest.config.mjs",
1028-
"pretest": "npm run compile-tests && npm run compile && npm run lint",
10291026
"lint": "eslint src/ ui/",
10301027
"format": "prettier --write .",
10311028
"format-check": "prettier --check .",
1032-
"download-icons": "node ./download-iconfont.mjs"
1029+
"download-icons": "node ./download-iconfont.mjs",
1030+
"stats": "npm run --silent package -- --env namedChunks=true --profile --json > ./dist/stats.json && webpack-bundle-analyzer ./dist/stats.json ./dist"
10331031
},
10341032
"devDependencies": {
10351033
"@cnblogs/eslint-config-typescript": "^1.0.1",
@@ -1073,20 +1071,20 @@
10731071
"prettier": "^2.5.0",
10741072
"style-loader": "^3.3.1",
10751073
"tailwindcss": "^3.0.23",
1076-
"terser-webpack-plugin": "^5.3.6",
1074+
"terser-webpack-plugin": "^5.3.7",
10771075
"ts-jest": "^29.0.5",
10781076
"ts-loader": "^9.2.5",
10791077
"ts-node": "^10.9.1",
10801078
"tsconfig-paths-webpack-plugin": "^3.5.2",
10811079
"typescript": "^4.8.4",
10821080
"utility-types": "^3.10.0",
1083-
"webpack": "5.70.x",
1084-
"webpack-cli": "^4.8.0"
1081+
"webpack": "^5.76.0",
1082+
"webpack-cli": "^5.0.1"
10851083
},
10861084
"dependencies": {
10871085
"@cnblogs/code-highlight-adapter": "^1.7.1",
10881086
"@cnblogs/code-quality": "^2.0.2",
1089-
"@cnblogs/markdown-it-presets": "^1.6.1",
1087+
"@cnblogs/markdown-it-presets": "1.9",
10901088
"@fluentui/react": "^8.62.4",
10911089
"base64url": "^3.0.1",
10921090
"blob": "^0.1.0",

src/commands/commands-registration.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import { openWorkspace } from './open-workspace';
2929
import { setWorkspace } from './set-workspace';
3030
import { revealWorkspaceInOs } from './reveal-workspace-in-os';
3131
import { viewPostOnline } from './view-post-online';
32-
import { exportPostToPdf } from './pdf/export-pdf.command';
3332
import { pullPostRemoteUpdates } from './pull-post-remote-updates';
3433
import { extractImages } from './extract-images';
3534
import { clearPostsSearchResults, refreshPostsSearchResults, searchPosts } from './posts-list/search';
@@ -75,7 +74,9 @@ export const registerCommands = () => {
7574
commands.registerCommand(`${appName}.set-workspace`, setWorkspace),
7675
commands.registerCommand(`${appName}.reveal-workspace-in-os`, revealWorkspaceInOs),
7776
commands.registerCommand(`${appName}.view-post-online`, viewPostOnline),
78-
commands.registerCommand(`${appName}.export-post-to-pdf`, exportPostToPdf),
77+
commands.registerCommand(`${appName}.export-post-to-pdf`, (input: unknown) =>
78+
import('./pdf/export-pdf.command').then(m => m.exportPostToPdf(input))
79+
),
7980
commands.registerCommand(`${appName}.extract-images`, extractImages),
8081
commands.registerCommand(`${appName}.search-posts`, searchPosts),
8182
commands.registerCommand(`${appName}.clear-posts-search-results`, clearPostsSearchResults),

src/commands/pdf/export-pdf.command.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import puppeteer from 'puppeteer-core';
1+
import type puppeteer from 'puppeteer-core';
22
import fs from 'fs';
33
import path from 'path';
44
import os from 'os';
@@ -7,13 +7,13 @@ import { Post } from '../../models/post';
77
import { PostFileMapManager } from '../../services/post-file-map';
88
import { postService } from '../../services/post.service';
99
import { extensionViews } from '../../tree-view-providers/tree-view-registration';
10-
import { postPdfTemplateBuilder } from './post-pdf-template-builder';
1110
import { chromiumPathProvider } from '../../utils/chromium-path-provider';
1211
import { Settings } from '../../services/settings.service';
1312
import { accountManager } from '../../authentication/account-manager';
1413
import { AlertService } from '../../services/alert.service';
1514
import { PostTreeItem } from '../../tree-view-providers/models/post-tree-item';
1615
import { PostEditDto } from '@/models/post-edit-dto';
16+
import { postPdfTemplateBuilder } from '@/commands/pdf/post-pdf-template-builder';
1717

1818
const launchBrowser = async (
1919
chromiumPath: string
@@ -25,6 +25,7 @@ const launchBrowser = async (
2525
| undefined
2626
> => {
2727
try {
28+
const puppeteer = (await import('puppeteer-core')).default;
2829
const browser = await puppeteer.launch({
2930
dumpio: true,
3031
headless: true,
@@ -177,7 +178,9 @@ const reportErrors = (errors: string[] | undefined) => {
177178
void window.showErrorMessage('导出pdf时遇到错误', { modal: true, detail: errors.join('\n') } as MessageOptions);
178179
};
179180

180-
const exportPostToPdf = async (input: Post | PostTreeItem | Uri): Promise<void> => {
181+
const exportPostToPdf = async (input: Post | PostTreeItem | Uri | unknown): Promise<void> => {
182+
if (!(input instanceof Post) && !(input instanceof PostTreeItem) && !(input instanceof Uri)) return;
183+
181184
const chromiumPath = await retrieveChromiumPath();
182185
if (!chromiumPath) return;
183186

src/commands/pdf/post-pdf-template-builder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { Post } from '../../models/post';
22
import { PostFileMapManager } from '../../services/post-file-map';
33
import fs from 'fs';
4-
import { markdownItFactory } from '@cnblogs/markdown-it-presets';
54
import { blogSettingsService } from '../../services/blog-settings.service';
65
import { accountManager } from '../../authentication/account-manager';
76
import { postCategoryService } from '../../services/post-category.service';
87
import { PostCategory } from '../../models/post-category';
8+
import { markdownItFactory } from '@cnblogs/markdown-it-presets';
99

1010
export namespace postPdfTemplateBuilder {
1111
export const HighlightedMessage = 'markdown-highlight-finished';

src/commands/show-local-file-to-post-info.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { postCategoryService } from '../services/post-category.service';
66
import { PostFileMapManager } from '../services/post-file-map';
77
import { searchPostsByTitle } from '../services/search-post-by-title';
88
import { viewPostOnline } from './view-post-online';
9-
import { format } from 'date-fns';
9+
import format from 'date-fns/format';
1010

1111
/**
1212
* 本地文件所关联的博文信息

src/markdown/extend-markdownIt.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { Settings } from '@/services/settings.service';
2-
import { HighlightCodeLinesPlugin, MarkdownIt, MultilineBlockquotePlugin } from '@cnblogs/markdown-it-presets';
2+
import { HighlightCodeLinesPlugin, MultilineBlockquotePlugin } from '@cnblogs/markdown-it-presets';
3+
import type { MarkdownIt } from '@cnblogs/markdown-it-presets';
34

45
export const extendMarkdownIt = (md: MarkdownIt) =>
56
md

src/models/ing.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { parseISO } from 'date-fns';
1+
import parseISO from 'date-fns/parseISO';
22
import { camelCase, isObject, mapKeys } from 'lodash-es';
33

44
export enum IngSendFromType {

src/models/post.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { differenceInSeconds, parseISO } from 'date-fns';
1+
import differenceInSeconds from 'date-fns/differenceInSeconds';
2+
import parseISO from 'date-fns/parseISO';
23

34
export class Post {
45
id = -1;

0 commit comments

Comments
 (0)