From 770540026a341c7ed850d6cf4f9967b9e2d6bf21 Mon Sep 17 00:00:00 2001 From: bholmesdev Date: Mon, 27 Jun 2022 17:26:15 -0400 Subject: [PATCH 1/6] wip: add package.json to smoke --- scripts/memory/project/package.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 scripts/memory/project/package.json diff --git a/scripts/memory/project/package.json b/scripts/memory/project/package.json new file mode 100644 index 0000000000000..6fff9ac819153 --- /dev/null +++ b/scripts/memory/project/package.json @@ -0,0 +1,8 @@ +{ + "name": "@test/smoke", + "version": "0.0.0", + "private": true, + "dependencies": { + "astro": "workspace:*" + } +} From f3fad6849b8b5c61a3986c78ab0fc36f5fd16b85 Mon Sep 17 00:00:00 2001 From: bholmesdev Date: Mon, 27 Jun 2022 17:29:29 -0400 Subject: [PATCH 2/6] fix: remove accidental "force true" on create-vite --- packages/astro/src/core/create-vite.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/astro/src/core/create-vite.ts b/packages/astro/src/core/create-vite.ts index 56a68fcdc0fe1..00e91ff6c9fbe 100644 --- a/packages/astro/src/core/create-vite.ts +++ b/packages/astro/src/core/create-vite.ts @@ -42,7 +42,6 @@ export async function createVite( clearScreen: false, // we want to control the output, not Vite logLevel: 'warn', // log warnings and errors only optimizeDeps: { - force: true, entries: ['src/**/*'], // Try and scan a user’s project (won’t catch everything), exclude: ['node-fetch'], }, From 04398de80f3f04437cff64363064cccabfc26979 Mon Sep 17 00:00:00 2001 From: bholmesdev Date: Mon, 27 Jun 2022 17:47:30 -0400 Subject: [PATCH 3/6] refactor: write smoke package.json programmatically --- scripts/memory/mk.js | 12 +++++++++++- scripts/memory/project/package.json | 8 -------- 2 files changed, 11 insertions(+), 9 deletions(-) delete mode 100644 scripts/memory/project/package.json diff --git a/scripts/memory/mk.js b/scripts/memory/mk.js index ae14e11915872..44cbe52778f7e 100644 --- a/scripts/memory/mk.js +++ b/scripts/memory/mk.js @@ -1,6 +1,16 @@ import fs from 'fs'; -const pages = new URL('./project/src/pages/', import.meta.url); +const base = new URL('./project/', import.meta.url); +const pages = new URL('./src/pages/', base); + +await fs.promises.writeFile(new URL('./package.json', base), `{ + "name": "@test/smoke", + "version": "0.0.0", + "private": true, + "dependencies": { + "astro": "workspace:*" + } +}`); for (let i = 0; i < 100; i++) { let content = `--- diff --git a/scripts/memory/project/package.json b/scripts/memory/project/package.json deleted file mode 100644 index 6fff9ac819153..0000000000000 --- a/scripts/memory/project/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "@test/smoke", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*" - } -} From 02854252036aeeb0f818559c04821b8d7c1dbc01 Mon Sep 17 00:00:00 2001 From: bholmesdev Date: Mon, 27 Jun 2022 17:53:25 -0400 Subject: [PATCH 4/6] refactor: add fontsource to noExternal --- .../fixtures/fontsource-package/astro.config.mjs | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/astro/test/fixtures/fontsource-package/astro.config.mjs diff --git a/packages/astro/test/fixtures/fontsource-package/astro.config.mjs b/packages/astro/test/fixtures/fontsource-package/astro.config.mjs new file mode 100644 index 0000000000000..03d5ecbec8f2e --- /dev/null +++ b/packages/astro/test/fixtures/fontsource-package/astro.config.mjs @@ -0,0 +1,13 @@ +import { defineConfig } from 'astro/config'; + +// https://astro.build/config +export default defineConfig({ + vite: { + ssr: { + noExternal: [ + '@fontsource/montserrat', + '@fontsource/monofett', + ] + } + } +}); From f64d4b043ecce698d5caac897f05e6e32809cfcc Mon Sep 17 00:00:00 2001 From: bholmesdev Date: Mon, 27 Jun 2022 18:05:53 -0400 Subject: [PATCH 5/6] fix: only add to ssr.noExternal if present in project --- packages/astro/src/core/create-vite.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/astro/src/core/create-vite.ts b/packages/astro/src/core/create-vite.ts index 00e91ff6c9fbe..dde97d13df5ca 100644 --- a/packages/astro/src/core/create-vite.ts +++ b/packages/astro/src/core/create-vite.ts @@ -14,6 +14,7 @@ import astroIntegrationsContainerPlugin from '../vite-plugin-integrations-contai import jsxVitePlugin from '../vite-plugin-jsx/index.js'; import markdownVitePlugin from '../vite-plugin-markdown/index.js'; import astroScriptsPlugin from '../vite-plugin-scripts/index.js'; +import { resolveDependency } from './util.js'; // note: ssr is still an experimental API hence the type omission from `vite` export type ViteConfigWithSSR = vite.InlineConfig & { ssr?: vite.SSROptions }; @@ -31,6 +32,20 @@ const ALWAYS_NOEXTERNAL = new Set([ 'astro/components', ]); +function getSsrNoExternalDeps(projectRoot: URL): string[] { + let noExternalDeps = [] + for (const dep of ALWAYS_NOEXTERNAL) { + try { + resolveDependency(dep, projectRoot) + noExternalDeps.push(dep) + } catch { + // ignore dependency if *not* installed / present in your project + // prevents hard error from Vite! + } + } + return noExternalDeps +} + /** Return a common starting point for all Vite actions */ export async function createVite( commandConfig: ViteConfigWithSSR, @@ -102,7 +117,7 @@ export async function createVite( ], }, ssr: { - noExternal: [...ALWAYS_NOEXTERNAL], + noExternal: getSsrNoExternalDeps(astroConfig.root), } }; From 75293d1ffcb3aa414de3fdc1dc27ed764c6b6182 Mon Sep 17 00:00:00 2001 From: bholmesdev Date: Tue, 28 Jun 2022 09:49:04 -0400 Subject: [PATCH 6/6] wip: what if we just... didn't have a memory test --- scripts/memory/index.js | 79 ----------------------- scripts/memory/mk.js | 21 ------ scripts/memory/project/.gitkeep | 0 scripts/memory/project/src/pages/.gitkeep | 0 4 files changed, 100 deletions(-) delete mode 100644 scripts/memory/index.js delete mode 100644 scripts/memory/mk.js delete mode 100644 scripts/memory/project/.gitkeep delete mode 100644 scripts/memory/project/src/pages/.gitkeep diff --git a/scripts/memory/index.js b/scripts/memory/index.js deleted file mode 100644 index 30cc1c0f2a8b7..0000000000000 --- a/scripts/memory/index.js +++ /dev/null @@ -1,79 +0,0 @@ -import { fileURLToPath } from 'url'; -import v8 from 'v8'; -import dev from '../../packages/astro/dist/core/dev/index.js'; -import { loadConfig } from '../../packages/astro/dist/core/config.js'; -import prettyBytes from 'pretty-bytes'; - -if (!global.gc) { - console.error('ERROR: Node must be run with --expose-gc'); - process.exit(1); -} - -const isCI = process.argv.includes('--ci'); - -/** URL directory containing the entire project. */ -const projDir = new URL('./project/', import.meta.url); - -let config = await loadConfig({ - cwd: fileURLToPath(projDir), -}); - -const telemetry = { - record() { - return Promise.resolve(); - }, -}; -const server = await dev(config, { logging: { level: 'error' }, telemetry }); - -// Prime the server so initial memory is created -await fetch(`http://localhost:3000/page-0`); - -async function run() { - for (let i = 0; i < 100; i++) { - let path = `/page-${i}`; - await fetch(`http://localhost:3000${path}`); - } -} - -global.gc(); -const startSize = v8.getHeapStatistics().used_heap_size; - -// HUMAN mode: Runs forever. Optimized for accurate results on each snapshot Slower than CI. -if (!isCI) { - console.log( - `Greetings, human. This test will run forever. Run with the "--ci" flag to finish with a result.` - ); - let i = 1; - while (i++) { - await run(); - global.gc(); - const checkpoint = v8.getHeapStatistics().used_heap_size; - console.log(`Snapshot ${String(i).padStart(3, '0')}: ${(checkpoint / startSize) * 100}%`); - } -} - -// CI mode: Runs 100 times. Optimized for speed with an accurate final result. -for (let i = 0; i < 100; i++) { - await run(); - const checkpoint = v8.getHeapStatistics().used_heap_size; - console.log(`Estimate ${String(i).padStart(3, '0')}/100: ${(checkpoint / startSize) * 100}%`); -} - -console.log(`Test complete. Running final garbage collection...`); -global.gc(); -const endSize = v8.getHeapStatistics().used_heap_size; - -// If the trailing average is higher than the median, see if it's more than 5% higher -let percentage = endSize / startSize; -const TEST_THRESHOLD = 1.5; -const isPass = percentage < TEST_THRESHOLD; -console.log(``); -console.log(`Result: ${isPass ? 'PASS' : 'FAIL'} (${percentage * 100}%)`); -console.log( - `Memory usage began at ${prettyBytes(startSize)} and finished at ${prettyBytes(endSize)}.` -); -console.log(`The threshold for a probable memory leak is ${TEST_THRESHOLD * 100}%`); -console.log(``); -console.log(`Exiting...`); -await server.stop(); -process.exit(isPass ? 0 : 1); diff --git a/scripts/memory/mk.js b/scripts/memory/mk.js deleted file mode 100644 index 44cbe52778f7e..0000000000000 --- a/scripts/memory/mk.js +++ /dev/null @@ -1,21 +0,0 @@ -import fs from 'fs'; - -const base = new URL('./project/', import.meta.url); -const pages = new URL('./src/pages/', base); - -await fs.promises.writeFile(new URL('./package.json', base), `{ - "name": "@test/smoke", - "version": "0.0.0", - "private": true, - "dependencies": { - "astro": "workspace:*" - } -}`); - -for (let i = 0; i < 100; i++) { - let content = `--- -const i = ${i}; ---- -{i}`; - await fs.promises.writeFile(new URL(`./page-${i}.astro`, pages), content, 'utf-8'); -} diff --git a/scripts/memory/project/.gitkeep b/scripts/memory/project/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/scripts/memory/project/src/pages/.gitkeep b/scripts/memory/project/src/pages/.gitkeep deleted file mode 100644 index e69de29bb2d1d..0000000000000