Skip to content

Commit

Permalink
some optimizations
Browse files Browse the repository at this point in the history
  • Loading branch information
christian-bromann committed Aug 19, 2024
1 parent 2c8d4ae commit 236446d
Show file tree
Hide file tree
Showing 9 changed files with 18 additions and 53 deletions.
4 changes: 2 additions & 2 deletions scripts/esbuild/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { join } from 'path';
import { getBanner } from '../utils/banner';
import { BuildOptions } from '../utils/options';
import { writePkgJson } from '../utils/write-pkg-json';
import { getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules, runBuilds } from './utils';
import { externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases, runBuilds } from './utils';

/**
* Runs esbuild to bundle the `cli` submodule
Expand All @@ -30,7 +30,7 @@ export async function buildCli(opts: BuildOptions) {
// this isn't strictly necessary to alias - however, this minimizes cuts down the bundle size by ~70kb.
cliAliases['prompts'] = 'prompts/lib/index.js';

const external = [...getEsbuildExternalModules(opts, opts.output.cliDir), '../testing/*'];
const external = [...externalNodeModules, '../testing/*'];

const cliEsbuildOptions = {
...getBaseEsbuildOptions(),
Expand Down
4 changes: 2 additions & 2 deletions scripts/esbuild/compiler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { join } from 'path';
import { getBanner } from '../utils/banner';
import { BuildOptions, createReplaceData } from '../utils/options';
import { writePkgJson } from '../utils/write-pkg-json';
import { getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules, runBuilds } from './utils';
import { externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases, runBuilds } from './utils';
import { bundleParse5 } from './utils/parse5';
import { bundleTerser } from './utils/terser';
import { bundleTypeScriptSource, tsCacheFilePath } from './utils/typescript-source';
Expand Down Expand Up @@ -51,7 +51,7 @@ export async function buildCompiler(opts: BuildOptions) {
};

const external = [
...getEsbuildExternalModules(opts, opts.output.compilerDir),
...externalNodeModules,
'../mock-doc/index.cjs',
'../sys/node/autoprefixer.js',
'../sys/node/index.js',
Expand Down
6 changes: 3 additions & 3 deletions scripts/esbuild/internal-platform-client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { join } from 'path';
import { getBanner } from '../utils/banner';
import { BuildOptions, createReplaceData } from '../utils/options';
import { writePkgJson } from '../utils/write-pkg-json';
import { externalAlias, getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules } from './utils';
import { externalAlias, externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases } from './utils';

/**
* Create objects containing ESbuild options for the two bundles which need to
Expand Down Expand Up @@ -41,7 +41,7 @@ export async function getInternalClientBundles(opts: BuildOptions): Promise<ESBu
const internalClientAliases = getEsbuildAliases();
internalClientAliases['@platform'] = join(inputClientDir, 'index.ts');

const clientExternal = getEsbuildExternalModules(opts, opts.output.internalDir);
const clientExternal = externalNodeModules;

const internalClientBundle: ESBuildOptions = {
...getBaseEsbuildOptions(),
Expand Down Expand Up @@ -73,7 +73,7 @@ export async function getInternalClientBundles(opts: BuildOptions): Promise<ESBu
}

const patchBrowserExternal = [
...getEsbuildExternalModules(opts, opts.output.internalDir),
...externalNodeModules,
'@stencil/core',
'@stencil/core/mock-doc',
];
Expand Down
4 changes: 2 additions & 2 deletions scripts/esbuild/internal-platform-hydrate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { getBanner } from '../utils/banner';
import { bundleDts } from '../utils/bundle-dts';
import { BuildOptions } from '../utils/options';
import { writePkgJson } from '../utils/write-pkg-json';
import { externalAlias, getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules } from './utils';
import { externalAlias, externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases } from './utils';

/**
* Create objects containing ESbuild options for the two bundles comprising
Expand Down Expand Up @@ -35,7 +35,7 @@ export async function getInternalPlatformHydrateBundles(opts: BuildOptions): Pro

const hydratePlatformInput = join(hydrateSrcDir, 'platform', 'index.js');

const external = getEsbuildExternalModules(opts, outputInternalHydrateDir);
const external = externalNodeModules;

const internalHydrateAliases = getEsbuildAliases();
internalHydrateAliases['@platform'] = hydratePlatformInput;
Expand Down
4 changes: 2 additions & 2 deletions scripts/esbuild/internal-platform-testing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { join } from 'path';

import { BuildOptions } from '../utils/options';
import { writePkgJson } from '../utils/write-pkg-json';
import { externalAlias, getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules } from './utils';
import { externalAlias, externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases } from './utils';

/**
* Get an ESBuild configuration object for the internal testing bundle. This
Expand Down Expand Up @@ -34,7 +34,7 @@ export async function getInternalTestingBundle(opts: BuildOptions): Promise<ESBu
'@stencil/core/mock-doc': '../../mock-doc/index.cjs',
};

const external: string[] = [...getEsbuildExternalModules(opts, opts.output.internalDir), '../../mock-doc/index.cjs'];
const external: string[] = [...externalNodeModules, '../../mock-doc/index.cjs'];

const internalTestingBuildOptions: ESBuildOptions = {
...getBaseEsbuildOptions(),
Expand Down
6 changes: 2 additions & 4 deletions scripts/esbuild/screenshot.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { join } from 'path';
import { getBanner } from '../utils/banner';
import { BuildOptions } from '../utils/options';
import { writePkgJson } from '../utils/write-pkg-json';
import { getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules, runBuilds } from './utils';
import { externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases, runBuilds } from './utils';

const screenshotBuilds = {
'Stencil Screenshot': 'index',
Expand Down Expand Up @@ -39,9 +39,7 @@ export async function buildScreenshot(opts: BuildOptions) {
});

const aliases = getEsbuildAliases();

const external = getEsbuildExternalModules(opts, opts.output.screenshotDir);

const external = externalNodeModules;
const baseScreenshotOptions = {
...getBaseEsbuildOptions(),
alias: aliases,
Expand Down
4 changes: 2 additions & 2 deletions scripts/esbuild/sys-node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import webpack, { Configuration } from 'webpack';
import { getBanner } from '../utils/banner';
import type { BuildOptions } from '../utils/options';
import { writePkgJson } from '../utils/write-pkg-json';
import { externalAlias, getBaseEsbuildOptions, getEsbuildAliases, getEsbuildExternalModules, runBuilds } from './utils';
import { externalAlias, externalNodeModules, getBaseEsbuildOptions, getEsbuildAliases, runBuilds } from './utils';

export async function buildSysNode(opts: BuildOptions) {
const inputDir = path.join(opts.buildDir, 'sys', 'node');
Expand All @@ -32,7 +32,7 @@ export async function buildSysNode(opts: BuildOptions) {
});

const external = [
...getEsbuildExternalModules(opts, opts.output.sysNodeDir),
...externalNodeModules,
// normally you wouldn't externalize your "own" directory here, but since
// we build multiple things within `opts.output.sysNodeDir` which should
// externalize each other we need to do so
Expand Down
4 changes: 2 additions & 2 deletions scripts/esbuild/testing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ import type { BuildOptions } from '../utils/options';
import { writePkgJson } from '../utils/write-pkg-json';
import {
externalAlias,
externalNodeModules,
getBaseEsbuildOptions,
getEsbuildAliases,
getEsbuildExternalModules,
getFirstOutputFile,
runBuilds,
} from './utils';
Expand Down Expand Up @@ -44,7 +44,7 @@ export async function buildTesting(opts: BuildOptions) {

const external = [
...EXTERNAL_TESTING_MODULES,
...getEsbuildExternalModules(opts, opts.output.testingDir),
...externalNodeModules,
'../internal/testing/*',
'../cli/index.cjs',
'../sys/node/index.js',
Expand Down
35 changes: 1 addition & 34 deletions scripts/esbuild/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export function getEsbuildAliases(): Record<string, string> {
* as side-effect-free, which allows imports from them to be properly
* tree-shaken.
*/
const externalNodeModules = [
export const externalNodeModules = [
'@jest/core',
'@jest/reporters',
'@microsoft/typescript-etw',
Expand All @@ -55,39 +55,6 @@ const externalNodeModules = [
'yargs',
];

/**
* Get a manifest of modules which should be marked as external for a given
* esbuild bundle
*
* @param opts options for the current build
* @param ownEntryPoint the entry point alias of the current module
* @returns a list of modules which should be marked as external
*/
export function getEsbuildExternalModules(opts: BuildOptions, ownEntryPoint: string): string[] {
const root = path.resolve(__dirname, '..', '..', '..');
const bundles = Object.values(opts.output)
/**
* Filter out the `internal`, `cli`, and `compiler` directories, as they we intend to import
* these primitives directly from these packages.
*/
.filter((bundle) => !bundle.endsWith('internal') && !bundle.endsWith('cli') && !bundle.endsWith('compiler') && !bundle.endsWith('screenshot') && !bundle.endsWith('mock-doc'))
.filter((outdir) => outdir !== ownEntryPoint)
/**
* transform the absolute path to a relative one
*/
.map((p) => [
'..' + path.sep + 'src' + path.sep + path.relative(root, path.join(p, '*')),
'.' + path.sep + 'src' + path.sep + path.relative(root, path.join(p, '*')),
])
.flat()
/**
* replace path separators with forward slashes
*/
.map((p) => p.replaceAll(path.sep, '/'));

return [...externalNodeModules, ...bundles];
}

/**
* A helper which runs an array of esbuild, uh, _builds_
*
Expand Down

0 comments on commit 236446d

Please sign in to comment.