diff --git a/.changeset/early-hounds-float.md b/.changeset/early-hounds-float.md
new file mode 100644
index 0000000000..0a708c59e4
--- /dev/null
+++ b/.changeset/early-hounds-float.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: ensure onMount correctly fires when new expressions are used
diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/NewExpression.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/NewExpression.js
index 6b393ae9b9..bcb2400932 100644
--- a/packages/svelte/src/compiler/phases/2-analyze/visitors/NewExpression.js
+++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/NewExpression.js
@@ -11,5 +11,7 @@ export function NewExpression(node, context) {
w.perf_avoid_inline_class(node);
}
+ context.state.analysis.needs_context = true;
+
context.next();
}
diff --git a/packages/svelte/tests/runtime-legacy/samples/onmount-external/_config.js b/packages/svelte/tests/runtime-legacy/samples/onmount-external/_config.js
new file mode 100644
index 0000000000..6cf976bd48
--- /dev/null
+++ b/packages/svelte/tests/runtime-legacy/samples/onmount-external/_config.js
@@ -0,0 +1,7 @@
+import { test } from '../../test';
+
+export default test({
+ async test({ assert, logs }) {
+ assert.deepEqual(logs, ['mounted']);
+ }
+});
diff --git a/packages/svelte/tests/runtime-legacy/samples/onmount-external/main.svelte b/packages/svelte/tests/runtime-legacy/samples/onmount-external/main.svelte
new file mode 100644
index 0000000000..e2e7dad8dc
--- /dev/null
+++ b/packages/svelte/tests/runtime-legacy/samples/onmount-external/main.svelte
@@ -0,0 +1,13 @@
+
+
+