Skip to content

Commit 4469aa5

Browse files
authored
feat(js): Add documentation for Micro Frontend Setup with CDN bundles (#12407)
1 parent 0d0925c commit 4469aa5

File tree

1 file changed

+63
-1
lines changed

1 file changed

+63
-1
lines changed

docs/platforms/javascript/common/best-practices/micro-frontends.mdx

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ for the multiplexed transport to reference for routing.
8383

8484
**Install the below code snippet in your host:**
8585

86-
```javascript
86+
```javascript {tabTitle:NPM}{index.js}
8787
import {
8888
init,
8989
makeFetchTransport,
@@ -131,6 +131,68 @@ init({
131131
},
132132
});
133133
```
134+
```html {tabTitle:CDN/Loader Bundle}{filename:index.html}
135+
<script
136+
src="https://browser.sentry-cdn.com/{{@inject packages.version('sentry.javascript.browser') }}/bundle.min.js"
137+
integrity="sha384-{{@inject packages.checksum('sentry.javascript.browser', 'bundle.min.js', 'sha384-base64') }}"
138+
crossorigin="anonymous"
139+
></script>
140+
141+
<script
142+
src="https://browser.sentry-cdn.com/{{@inject packages.version('sentry.javascript.browser') }}/multiplexedtransport.min.js"
143+
integrity="sha384-{{@inject packages.checksum('sentry.javascript.browser', 'multiplexedtransport.min.js', 'sha384-base64') }}"
144+
crossorigin="anonymous"
145+
></script>
146+
147+
<script
148+
src="https://browser.sentry-cdn.com/{{@inject packages.version('sentry.javascript.browser') }}/modulemetadata.min.js"
149+
integrity="sha384-{{@inject packages.checksum('sentry.javascript.browser', 'modulemetadata.min.js', 'sha384-base64') }}"
150+
crossorigin="anonymous"
151+
></script>
152+
153+
154+
<script>
155+
const EXTRA_KEY = "ROUTE_TO";
156+
157+
const transport = Sentry.makeMultiplexedTransport(Sentry.makeFetchTransport, (args) => {
158+
const event = args.getEvent();
159+
if (
160+
event &&
161+
event.extra &&
162+
EXTRA_KEY in event.extra &&
163+
Array.isArray(event.extra[EXTRA_KEY])
164+
) {
165+
return event.extra[EXTRA_KEY];
166+
}
167+
return [];
168+
});
169+
170+
Sentry.init({
171+
dsn: "__DEFAULT_DSN__",
172+
integrations: [Sentry.moduleMetadataIntegration()],
173+
transport,
174+
beforeSend: (event) => {
175+
if (event?.exception?.values?.[0].stacktrace.frames) {
176+
const frames = event.exception.values[0].stacktrace.frames;
177+
// Find the last frame with module metadata containing a DSN
178+
const routeTo = frames
179+
.filter((frame) => frame.module_metadata && frame.module_metadata.dsn)
180+
.map((v) => v.module_metadata)
181+
.slice(-1); // using top frame only - you may want to customize this according to your needs
182+
183+
if (routeTo.length) {
184+
event.extra = {
185+
...event.extra,
186+
[EXTRA_KEY]: routeTo,
187+
};
188+
}
189+
}
190+
191+
return event;
192+
},
193+
});
194+
</script>
195+
```
134196
135197
Once this is set up, errors - both handled and unhandled - will be automatically routed to the right project.
136198

0 commit comments

Comments
 (0)