diff --git a/src/compiler/compile/render_dom/wrappers/Element/index.ts b/src/compiler/compile/render_dom/wrappers/Element/index.ts
index 9b14d1cd6c9..06a33f97488 100644
--- a/src/compiler/compile/render_dom/wrappers/Element/index.ts
+++ b/src/compiler/compile/render_dom/wrappers/Element/index.ts
@@ -272,7 +272,7 @@ export default class ElementWrapper extends Wrapper {
);
if (parent_node === '@_document.head') {
- block.builders.destroy.add_line(`@detach(${node});`);
+ block.builders.destroy.add_conditional('detaching', `@detach(${node});`);
}
} else {
block.builders.mount.add_line(`@insert(#target, ${node}, anchor);`);
diff --git a/test/js/samples/head-no-whitespace/expected.js b/test/js/samples/head-no-whitespace/expected.js
index 457df77dc86..dbdd82f358b 100644
--- a/test/js/samples/head-no-whitespace/expected.js
+++ b/test/js/samples/head-no-whitespace/expected.js
@@ -33,8 +33,10 @@ function create_fragment(ctx) {
o: noop,
d(detaching) {
- detach(meta0);
- detach(meta1);
+ if (detaching) {
+ detach(meta0);
+ detach(meta1);
+ }
}
};
}
diff --git a/test/runtime/samples/head-detached-in-dynamic-component/A.svelte b/test/runtime/samples/head-detached-in-dynamic-component/A.svelte
new file mode 100644
index 00000000000..f05488e3e4e
--- /dev/null
+++ b/test/runtime/samples/head-detached-in-dynamic-component/A.svelte
@@ -0,0 +1,5 @@
+
+
+
+
+A
\ No newline at end of file
diff --git a/test/runtime/samples/head-detached-in-dynamic-component/B.svelte b/test/runtime/samples/head-detached-in-dynamic-component/B.svelte
new file mode 100644
index 00000000000..943b307cc30
--- /dev/null
+++ b/test/runtime/samples/head-detached-in-dynamic-component/B.svelte
@@ -0,0 +1,5 @@
+
+
+
+
+B
\ No newline at end of file
diff --git a/test/runtime/samples/head-detached-in-dynamic-component/_config.js b/test/runtime/samples/head-detached-in-dynamic-component/_config.js
new file mode 100644
index 00000000000..e18589e10e1
--- /dev/null
+++ b/test/runtime/samples/head-detached-in-dynamic-component/_config.js
@@ -0,0 +1,15 @@
+export default {
+ html: `
+ A
+ `,
+
+ test({ assert, component, window }) {
+ component.x = false;
+
+ const meta = window.document.querySelectorAll('meta');
+
+ assert.equal(meta.length, 1);
+ assert.equal(meta[0].name, 'description');
+ assert.equal(meta[0].content, 'B');
+ }
+};
diff --git a/test/runtime/samples/head-detached-in-dynamic-component/main.svelte b/test/runtime/samples/head-detached-in-dynamic-component/main.svelte
new file mode 100644
index 00000000000..e4acd7737ad
--- /dev/null
+++ b/test/runtime/samples/head-detached-in-dynamic-component/main.svelte
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file