summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Matthew Phillips <matthew@matthewphillips.info> 2021-06-16 13:37:29 -0400
committerGravatar GitHub <noreply@github.com> 2021-06-16 13:37:29 -0400
commit5601efa257bab59deac22a505702b993a9845523 (patch)
tree8caad898155bb44367e15a3ebd495e6037beeaab
parent3ada25d7d9ebbdff469d31399ac112d3d7fb7249 (diff)
downloadastro-5601efa257bab59deac22a505702b993a9845523.tar.gz
astro-5601efa257bab59deac22a505702b993a9845523.tar.zst
astro-5601efa257bab59deac22a505702b993a9845523.zip
Prevent HMR client from being part of bundle (#464)
-rw-r--r--packages/astro/snowpack-plugin.cjs3
-rw-r--r--packages/astro/src/compiler/transform/head.ts3
-rw-r--r--packages/astro/src/runtime.ts4
-rw-r--r--packages/astro/test/astro-basic.test.js17
4 files changed, 23 insertions, 4 deletions
diff --git a/packages/astro/snowpack-plugin.cjs b/packages/astro/snowpack-plugin.cjs
index 5f99dd86f..47d784975 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<any>} */
-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 d7bba5857..6efa79c8c 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 124c2ffdc..a7bd55fed 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 332012317..48edbdd7e 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();