diff --git a/.changeset/fresh-balloons-glow.md b/.changeset/fresh-balloons-glow.md new file mode 100644 index 000000000000..5c71e9879824 --- /dev/null +++ b/.changeset/fresh-balloons-glow.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Fixes an issue where HMR would not trigger when modifying files while using @astrojs/cloudflare with prerenderEnvironment: 'node' enabled. diff --git a/packages/astro/e2e/cloudflare-node-prerender-hmr.test.js b/packages/astro/e2e/cloudflare-node-prerender-hmr.test.js new file mode 100644 index 000000000000..c616de3fc5c5 --- /dev/null +++ b/packages/astro/e2e/cloudflare-node-prerender-hmr.test.js @@ -0,0 +1,34 @@ +import { expect } from '@playwright/test'; +import { testFactory } from './test-utils.js'; + +const test = testFactory(import.meta.url, { + root: './fixtures/cloudflare-node-prerender-hmr/', + devToolbar: { + enabled: false, + }, +}); + +let devServer; + +test.beforeAll(async ({ astro }) => { + devServer = await astro.startDevServer(); +}); + +test.afterAll(async () => { + await devServer.stop(); +}); + +test.describe('Astro page', () => { + test('refresh with HMR', async ({ page, astro }) => { + await page.goto(astro.resolveUrl('/')); + + const h = page.locator('h1'); + await expect(h, 'original text set').toHaveText('Original content'); + + await astro.editFile('./src/pages/index.astro', (original) => + original.replaceAll('Original', 'Updated'), + ); + + await expect(h, 'text changed').toHaveText('Updated content'); + }); +}); diff --git a/packages/astro/e2e/fixtures/cloudflare-node-prerender-hmr/astro.config.mjs b/packages/astro/e2e/fixtures/cloudflare-node-prerender-hmr/astro.config.mjs new file mode 100644 index 000000000000..18c994a1f265 --- /dev/null +++ b/packages/astro/e2e/fixtures/cloudflare-node-prerender-hmr/astro.config.mjs @@ -0,0 +1,9 @@ +// @ts-check +import cloudflare from '@astrojs/cloudflare'; +import { defineConfig } from 'astro/config'; + +export default defineConfig({ + adapter: cloudflare({ + prerenderEnvironment: 'node', + }), +}); diff --git a/packages/astro/e2e/fixtures/cloudflare-node-prerender-hmr/package.json b/packages/astro/e2e/fixtures/cloudflare-node-prerender-hmr/package.json new file mode 100644 index 000000000000..1f02c5468057 --- /dev/null +++ b/packages/astro/e2e/fixtures/cloudflare-node-prerender-hmr/package.json @@ -0,0 +1,13 @@ +{ + "name": "@test/astro-cloudflare-node-prerender-mdx", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "astro dev", + "build": "astro build" + }, + "dependencies": { + "@astrojs/cloudflare": "workspace:*", + "astro": "workspace:*" + } +} diff --git a/packages/astro/e2e/fixtures/cloudflare-node-prerender-hmr/src/pages/index.astro b/packages/astro/e2e/fixtures/cloudflare-node-prerender-hmr/src/pages/index.astro new file mode 100644 index 000000000000..d7467b5195c7 --- /dev/null +++ b/packages/astro/e2e/fixtures/cloudflare-node-prerender-hmr/src/pages/index.astro @@ -0,0 +1,6 @@ +--- +--- + +Original content +

Original content

+ diff --git a/packages/astro/src/vite-plugin-hmr-reload/index.ts b/packages/astro/src/vite-plugin-hmr-reload/index.ts index 355aa035823b..c9378b501643 100644 --- a/packages/astro/src/vite-plugin-hmr-reload/index.ts +++ b/packages/astro/src/vite-plugin-hmr-reload/index.ts @@ -1,7 +1,7 @@ import type { EnvironmentModuleNode, Plugin } from 'vite'; -import { ASTRO_VITE_ENVIRONMENT_NAMES } from '../core/constants.js'; import { VIRTUAL_PAGE_RESOLVED_MODULE_ID } from '../vite-plugin-pages/const.js'; import { getDevCssModuleNameFromPageVirtualModuleName } from '../vite-plugin-css/util.js'; +import { isAstroServerEnvironment } from '../environments.js'; /** * The very last Vite plugin to reload the browser if any SSR-only module are updated @@ -15,7 +15,7 @@ export default function hmrReload(): Plugin { hotUpdate: { order: 'post', handler({ modules, server, timestamp }) { - if (this.environment.name !== ASTRO_VITE_ENVIRONMENT_NAMES.ssr) return; + if (!isAstroServerEnvironment(this.environment)) return; let hasSsrOnlyModules = false; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ef9101e7473d..2782e5f0e3bc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1015,6 +1015,15 @@ importers: specifier: ^3.5.30 version: 3.5.30(typescript@5.9.3) + packages/astro/e2e/fixtures/cloudflare-node-prerender-hmr: + dependencies: + '@astrojs/cloudflare': + specifier: workspace:* + version: link:../../../../integrations/cloudflare + astro: + specifier: workspace:* + version: link:../../.. + packages/astro/e2e/fixtures/cloudflare/packages/my-lib: {} packages/astro/e2e/fixtures/content-collections: