Skip to content

Commit

Permalink
fix(electron): optimize bundle size by removing unused dependencies (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
pengx17 committed Mar 30, 2024
1 parent 506efdf commit b15ae21
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 4 deletions.
17 changes: 15 additions & 2 deletions packages/frontend/electron/scripts/build-layers.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import fs from 'node:fs/promises';
import path from 'node:path';

import * as esbuild from 'esbuild';

import { config, mode } from './common';
import { config, mode, rootDir } from './common';

async function buildLayers() {
const common = config();
Expand All @@ -16,10 +19,20 @@ async function buildLayers() {
`"${process.env.BUILD_TYPE_OVERRIDE}"`;
}

await esbuild.build({
const metafile = process.env.METAFILE;

const result = await esbuild.build({
...common,
define: define,
metafile: !!metafile,
});

if (metafile) {
await fs.writeFile(
path.resolve(rootDir, `metafile-${Date.now()}.json`),
JSON.stringify(result.metafile, null, 2)
);
}
}

await buildLayers();
Expand Down
26 changes: 24 additions & 2 deletions packages/frontend/electron/scripts/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { fileURLToPath } from 'node:url';
// eslint-disable-next-line @typescript-eslint/no-restricted-imports
import { getRuntimeConfig } from '@affine/cli/src/webpack/runtime-config';
import { sentryEsbuildPlugin } from '@sentry/esbuild-plugin';
import type { BuildOptions } from 'esbuild';
import type { BuildOptions, Plugin } from 'esbuild';

export const electronDir = fileURLToPath(new URL('..', import.meta.url));

Expand Down Expand Up @@ -33,7 +33,7 @@ export const config = (): BuildOptions => {
define['process.env.GITHUB_SHA'] = `"${process.env.GITHUB_SHA}"`;
}

const plugins = [];
const plugins: Plugin[] = [];

if (
process.env.SENTRY_AUTH_TOKEN &&
Expand All @@ -49,6 +49,28 @@ export const config = (): BuildOptions => {
);
}

plugins.push({
name: 'no-side-effects',
setup(build) {
build.onResolve({ filter: /\.js/ }, async args => {
if (args.pluginData) return; // Ignore this if we called ourselves

const { path, ...rest } = args;

// mark all blocksuite packages as side-effect free
// because they will include a lot of files that are not used in node_modules
if (rest.resolveDir.includes('blocksuite')) {
rest.pluginData = true; // Avoid infinite recursion
const result = await build.resolve(path, rest);

result.sideEffects = false;
return result;
}
return null;
});
},
});

return {
entryPoints: [
resolve(electronDir, './src/main/index.ts'),
Expand Down

0 comments on commit b15ae21

Please sign in to comment.