From 5601efa257bab59deac22a505702b993a9845523 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Wed, 16 Jun 2021 13:37:29 -0400 Subject: [PATCH] Prevent HMR client from being part of bundle (#464) --- packages/astro/snowpack-plugin.cjs | 3 ++- packages/astro/src/compiler/transform/head.ts | 3 ++- packages/astro/src/runtime.ts | 4 +++- packages/astro/test/astro-basic.test.js | 17 ++++++++++++++++- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/packages/astro/snowpack-plugin.cjs b/packages/astro/snowpack-plugin.cjs index 5f99dd86f2..47d7849754 100644 --- a/packages/astro/snowpack-plugin.cjs +++ b/packages/astro/snowpack-plugin.cjs @@ -5,7 +5,7 @@ const transformPromise = import('./dist/compiler/index.js'); const DEFAULT_HMR_PORT = 12321; /** @type {import('snowpack').SnowpackPluginFactory} */ -module.exports = (snowpackConfig, { resolvePackageUrl, renderers, astroConfig } = {}) => { +module.exports = (snowpackConfig, { resolvePackageUrl, renderers, astroConfig, mode } = {}) => { let hmrPort = DEFAULT_HMR_PORT; return { name: 'snowpack-astro', @@ -58,6 +58,7 @@ ${contents}`; const compileOptions = { astroConfig, hmrPort, + mode, resolvePackageUrl, renderers, }; diff --git a/packages/astro/src/compiler/transform/head.ts b/packages/astro/src/compiler/transform/head.ts index d7bba58571..6efa79c8ce 100644 --- a/packages/astro/src/compiler/transform/head.ts +++ b/packages/astro/src/compiler/transform/head.ts @@ -5,7 +5,8 @@ import type { TemplateNode } from '@astrojs/parser'; export default function (opts: TransformOptions): Transformer { let head: TemplateNode; let hasComponents = false; - let isHmrEnabled = typeof opts.compileOptions.hmrPort !== 'undefined'; + let isHmrEnabled = typeof opts.compileOptions.hmrPort !== 'undefined' && + opts.compileOptions.mode === 'development'; return { visitors: { diff --git a/packages/astro/src/runtime.ts b/packages/astro/src/runtime.ts index 124c2ffdcf..a7bd55fed5 100644 --- a/packages/astro/src/runtime.ts +++ b/packages/astro/src/runtime.ts @@ -313,7 +313,7 @@ const DEFAULT_RENDERERS = ['@astrojs/renderer-vue', '@astrojs/renderer-svelte', /** Create a new Snowpack instance to power Astro */ async function createSnowpack(astroConfig: AstroConfig, options: CreateSnowpackOptions) { - const { projectRoot, pages: pagesRoot, renderers = DEFAULT_RENDERERS } = astroConfig; + const { projectRoot, renderers = DEFAULT_RENDERERS } = astroConfig; const { mode, resolvePackageUrl } = options; const frontendPath = new URL('./frontend/', import.meta.url); @@ -326,9 +326,11 @@ async function createSnowpack(astroConfig: AstroConfig, options: CreateSnowpackO renderers?: { name: string; client: string; server: string }[]; astroConfig: AstroConfig; hmrPort?: number; + mode: RuntimeMode; } = { astroConfig, resolvePackageUrl, + mode, }; const mountOptions = { diff --git a/packages/astro/test/astro-basic.test.js b/packages/astro/test/astro-basic.test.js index 3320123175..48edbdd7e6 100644 --- a/packages/astro/test/astro-basic.test.js +++ b/packages/astro/test/astro-basic.test.js @@ -1,7 +1,7 @@ import { suite } from 'uvu'; import * as assert from 'uvu/assert'; import { doc } from './test-utils.js'; -import { setup } from './helpers.js'; +import { setup, setupBuild } from './helpers.js'; const Basics = suite('Basic test'); @@ -10,6 +10,7 @@ setup(Basics, './fixtures/astro-basic', { mode: 'development', }, }); +setupBuild(Basics, './fixtures/astro-basic'); Basics('Can load page', async ({ runtime }) => { const result = await runtime.load('/'); @@ -47,4 +48,18 @@ Basics('Selector with an empty body', async ({ runtime }) => { assert.equal($('.author').length, 1, 'author class added'); }); +Basics('Build does not include HMR client', async ({ build, readFile }) => { + await build().catch(err => { + assert.ok(!err, 'Error during the build'); + }); + const clientHTML = await readFile('/client/index.html'); + const $ = doc(clientHTML); + + assert.equal($('script[src="/_snowpack/hmr-client.js"]').length, 0, 'No HMR client script'); + const hmrPortScript = $('script').filter((i, el) => { + return $(el).text().match(/window\.HMR_WEBSOCKET_PORT/); + }); + assert.equal(hmrPortScript.length, 0, 'No script setting the websocket port'); +}); + Basics.run();