diff --git a/CHANGELOG.md b/CHANGELOG.md
index 092f7354900..9bb804d545a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -27,6 +27,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2
* chore: enforce `import type` for type-only imports via ESLint [#6467](https://github.com/open-telemetry/opentelemetry-js/pull/6467) @overbalance
* perf(sdk-trace-base): avoid Object.entries in Span.setAttributes [#6514](https://github.com/open-telemetry/opentelemetry-js/pull/6514) @daniellockyer
* perf(sdk-trace-base): optimize `Span.{addEvent,addLink}` performance [#6516](https://github.com/open-telemetry/opentelemetry-js/pull/6516) @daniellockyer
+* test(bundlers): broaden bundler test coverage and assert known protobuf dynamic-require failures [#6482](https://github.com/open-telemetry/opentelemetry-js/pull/6482) @overbalance
## 2.6.0
diff --git a/bundler-tests/browser/nextjs-15-edge/middleware.js b/bundler-tests/browser/nextjs-15-edge/middleware.js
index 00158646dfb..d3cb236ba88 100644
--- a/bundler-tests/browser/nextjs-15-edge/middleware.js
+++ b/bundler-tests/browser/nextjs-15-edge/middleware.js
@@ -1,8 +1,52 @@
+import { DiagConsoleLogger, diag } from '@opentelemetry/api';
+import { logs } from '@opentelemetry/api-logs';
+import { W3CTraceContextPropagator } from '@opentelemetry/core';
+import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
+import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
+import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
+import { InstrumentationBase } from '@opentelemetry/instrumentation';
+import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
+import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';
+import { browserDetector } from '@opentelemetry/opentelemetry-browser-detector';
+import { B3Propagator } from '@opentelemetry/propagator-b3';
import { defaultServiceName } from '@opentelemetry/resources';
+import {
+ LoggerProvider,
+ SimpleLogRecordProcessor,
+} from '@opentelemetry/sdk-logs';
+import { MeterProvider } from '@opentelemetry/sdk-metrics';
+import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
+import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
+
+diag.setLogger(new DiagConsoleLogger());
+
+logs.setGlobalLoggerProvider(
+ new LoggerProvider({
+ processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
+ })
+);
+
+class TestInstrumentation extends InstrumentationBase {
+ init() {
+ return [];
+ }
+}
export function middleware(request) {
const serviceName = defaultServiceName();
- console.log('Service name:', serviceName);
+ const logger = logs.getLogger('bundle-test-nextjs-edge');
+ logger.emit({ body: serviceName, eventName: 'custom.event' });
+ new TestInstrumentation('test', '0.0.0');
+ new BasicTracerProvider();
+ new MeterProvider();
+ new OTLPTraceExporter();
+ new OTLPMetricExporter();
+ new W3CTraceContextPropagator();
+ new B3Propagator();
+ new WebTracerProvider();
+ new FetchInstrumentation();
+ new XMLHttpRequestInstrumentation();
+ void browserDetector;
return Response.next();
}
diff --git a/bundler-tests/browser/nextjs-15-edge/package.json b/bundler-tests/browser/nextjs-15-edge/package.json
index c23ac0836f7..2e7eb5c61aa 100644
--- a/bundler-tests/browser/nextjs-15-edge/package.json
+++ b/bundler-tests/browser/nextjs-15-edge/package.json
@@ -1,13 +1,28 @@
{
- "name": "nextjs-15-edge-bundle-test",
+ "name": "bundler-tests-browser-nextjs-15-edge",
"type": "module",
"private": true,
"scripts": {
"build": "rm -rf .next && next build",
- "test:bundle": "npm i && npm run build"
+ "test:bundle": "npm i && node test-bundle.mjs"
},
"dependencies": {
+ "@opentelemetry/api": "file:../../../api",
+ "@opentelemetry/api-logs": "file:../../../experimental/packages/api-logs",
+ "@opentelemetry/core": "file:../../../packages/opentelemetry-core",
+ "@opentelemetry/exporter-logs-otlp-http": "file:../../../experimental/packages/exporter-logs-otlp-http",
+ "@opentelemetry/exporter-metrics-otlp-http": "file:../../../experimental/packages/opentelemetry-exporter-metrics-otlp-http",
+ "@opentelemetry/exporter-trace-otlp-http": "file:../../../experimental/packages/exporter-trace-otlp-http",
+ "@opentelemetry/instrumentation": "file:../../../experimental/packages/opentelemetry-instrumentation",
+ "@opentelemetry/instrumentation-fetch": "file:../../../experimental/packages/opentelemetry-instrumentation-fetch",
+ "@opentelemetry/instrumentation-xml-http-request": "file:../../../experimental/packages/opentelemetry-instrumentation-xml-http-request",
+ "@opentelemetry/opentelemetry-browser-detector": "file:../../../experimental/packages/opentelemetry-browser-detector",
+ "@opentelemetry/propagator-b3": "file:../../../packages/opentelemetry-propagator-b3",
"@opentelemetry/resources": "file:../../../packages/opentelemetry-resources",
+ "@opentelemetry/sdk-logs": "file:../../../experimental/packages/sdk-logs",
+ "@opentelemetry/sdk-metrics": "file:../../../packages/sdk-metrics",
+ "@opentelemetry/sdk-trace-base": "file:../../../packages/opentelemetry-sdk-trace-base",
+ "@opentelemetry/sdk-trace-web": "file:../../../packages/opentelemetry-sdk-trace-web",
"next": "^15",
"react": "^18",
"react-dom": "^18"
diff --git a/bundler-tests/browser/nextjs-15-edge/project.json b/bundler-tests/browser/nextjs-15-edge/project.json
index 49d53202949..1e3d86caf25 100644
--- a/bundler-tests/browser/nextjs-15-edge/project.json
+++ b/bundler-tests/browser/nextjs-15-edge/project.json
@@ -1,3 +1,3 @@
{
- "name": "nextjs-15-edge-bundle-test"
+ "name": "bundler-tests-browser-nextjs-15-edge"
}
diff --git a/bundler-tests/browser/nextjs-15-edge/test-bundle.mjs b/bundler-tests/browser/nextjs-15-edge/test-bundle.mjs
new file mode 100644
index 00000000000..6297f88035c
--- /dev/null
+++ b/bundler-tests/browser/nextjs-15-edge/test-bundle.mjs
@@ -0,0 +1,37 @@
+/**
+ * Runs the Next.js 15 edge build and asserts the known protobuf Dynamic Code
+ * Evaluation error. This exit(0) is intentional: the test passes while the bug
+ * exists and will break when it is fixed, signalling that this file should be
+ * removed and test:bundle should revert to just `npm run build`.
+ */
+import { spawnSync } from 'node:child_process';
+import { fileURLToPath } from 'node:url';
+import { dirname } from 'node:path';
+
+const testDir = dirname(fileURLToPath(import.meta.url));
+
+const result = spawnSync('npm', ['run', 'build'], {
+ cwd: testDir,
+ encoding: 'utf-8',
+ shell: false,
+});
+
+const output = (result.stdout ?? '') + (result.stderr ?? '');
+const buildFailed = result.status !== 0;
+const hasExpectedError =
+ /Dynamic Code Evaluation/.test(output) && /protobuf/i.test(output);
+
+if (!buildFailed) {
+ console.error(
+ 'Build succeeded — expected protobuf Dynamic Code Evaluation error.\n' +
+ 'The underlying bug may be fixed. Update this test.'
+ );
+ process.exit(1);
+}
+
+if (!hasExpectedError) {
+ console.error('Build failed for an unexpected reason:\n', output);
+ process.exit(1);
+}
+
+console.log('Known protobuf Dynamic Code Evaluation build failure confirmed');
diff --git a/bundler-tests/browser/nextjs-16-edge/app/api/test/route.js b/bundler-tests/browser/nextjs-16-edge/app/api/test/route.js
index 0835276d060..a9d9d440fa3 100644
--- a/bundler-tests/browser/nextjs-16-edge/app/api/test/route.js
+++ b/bundler-tests/browser/nextjs-16-edge/app/api/test/route.js
@@ -1,9 +1,54 @@
+import { DiagConsoleLogger, diag } from '@opentelemetry/api';
+import { logs } from '@opentelemetry/api-logs';
+import { W3CTraceContextPropagator } from '@opentelemetry/core';
+import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
+import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
+import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
+import { InstrumentationBase } from '@opentelemetry/instrumentation';
+import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
+import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';
+import { browserDetector } from '@opentelemetry/opentelemetry-browser-detector';
+import { B3Propagator } from '@opentelemetry/propagator-b3';
import { defaultServiceName } from '@opentelemetry/resources';
+import {
+ LoggerProvider,
+ SimpleLogRecordProcessor,
+} from '@opentelemetry/sdk-logs';
+import { MeterProvider } from '@opentelemetry/sdk-metrics';
+import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
+import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
export const runtime = 'edge';
+diag.setLogger(new DiagConsoleLogger());
+
+logs.setGlobalLoggerProvider(
+ new LoggerProvider({
+ processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
+ })
+);
+
+class TestInstrumentation extends InstrumentationBase {
+ init() {
+ return [];
+ }
+}
+
export function GET(request) {
const serviceName = defaultServiceName();
+ const logger = logs.getLogger('bundle-test-nextjs-edge');
+ logger.emit({ body: 'test-event-body', eventName: 'custom.event' });
+ new TestInstrumentation('test', '0.0.0');
+ new BasicTracerProvider();
+ new MeterProvider();
+ new OTLPTraceExporter();
+ new OTLPMetricExporter();
+ new W3CTraceContextPropagator();
+ new B3Propagator();
+ new WebTracerProvider();
+ new FetchInstrumentation();
+ new XMLHttpRequestInstrumentation();
+ void browserDetector;
return new Response(JSON.stringify({ serviceName }), {
headers: { 'Content-Type': 'application/json' },
});
diff --git a/bundler-tests/browser/nextjs-16-edge/package.json b/bundler-tests/browser/nextjs-16-edge/package.json
index 3668d76cde5..f132749058d 100644
--- a/bundler-tests/browser/nextjs-16-edge/package.json
+++ b/bundler-tests/browser/nextjs-16-edge/package.json
@@ -1,13 +1,28 @@
{
- "name": "nextjs-16-edge-bundle-test",
+ "name": "bundler-tests-browser-nextjs-16-edge",
"type": "module",
"private": true,
"scripts": {
"build": "rm -rf .next && next build",
- "test:bundle": "npm i && npx tsx next.test.ts"
+ "test:bundle": "npm i && node test-bundle.mjs"
},
"dependencies": {
+ "@opentelemetry/api": "file:../../../api",
+ "@opentelemetry/api-logs": "file:../../../experimental/packages/api-logs",
+ "@opentelemetry/core": "file:../../../packages/opentelemetry-core",
+ "@opentelemetry/exporter-logs-otlp-http": "file:../../../experimental/packages/exporter-logs-otlp-http",
+ "@opentelemetry/exporter-metrics-otlp-http": "file:../../../experimental/packages/opentelemetry-exporter-metrics-otlp-http",
+ "@opentelemetry/exporter-trace-otlp-http": "file:../../../experimental/packages/exporter-trace-otlp-http",
+ "@opentelemetry/instrumentation": "file:../../../experimental/packages/opentelemetry-instrumentation",
+ "@opentelemetry/instrumentation-fetch": "file:../../../experimental/packages/opentelemetry-instrumentation-fetch",
+ "@opentelemetry/instrumentation-xml-http-request": "file:../../../experimental/packages/opentelemetry-instrumentation-xml-http-request",
+ "@opentelemetry/opentelemetry-browser-detector": "file:../../../experimental/packages/opentelemetry-browser-detector",
+ "@opentelemetry/propagator-b3": "file:../../../packages/opentelemetry-propagator-b3",
"@opentelemetry/resources": "file:../../../packages/opentelemetry-resources",
+ "@opentelemetry/sdk-logs": "file:../../../experimental/packages/sdk-logs",
+ "@opentelemetry/sdk-metrics": "file:../../../packages/sdk-metrics",
+ "@opentelemetry/sdk-trace-base": "file:../../../packages/opentelemetry-sdk-trace-base",
+ "@opentelemetry/sdk-trace-web": "file:../../../packages/opentelemetry-sdk-trace-web",
"next": "^16",
"react": "^19",
"react-dom": "^19"
diff --git a/bundler-tests/browser/nextjs-16-edge/project.json b/bundler-tests/browser/nextjs-16-edge/project.json
index 4fe165dfc53..f4133bcfbe4 100644
--- a/bundler-tests/browser/nextjs-16-edge/project.json
+++ b/bundler-tests/browser/nextjs-16-edge/project.json
@@ -1,3 +1,3 @@
{
- "name": "nextjs-16-edge-bundle-test"
+ "name": "bundler-tests-browser-nextjs-16-edge"
}
diff --git a/bundler-tests/browser/nextjs-16-edge/next.test.ts b/bundler-tests/browser/nextjs-16-edge/test-bundle.mjs
similarity index 100%
rename from bundler-tests/browser/nextjs-16-edge/next.test.ts
rename to bundler-tests/browser/nextjs-16-edge/test-bundle.mjs
diff --git a/bundler-tests/browser/webpack-4/index.html b/bundler-tests/browser/webpack-4/index.html
deleted file mode 100644
index 6782dc02ac4..00000000000
--- a/bundler-tests/browser/webpack-4/index.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- OpenTelemetry example
-
-
-
-
- Example of using the OpenTelemetry Logs SDK
-
-
-
-
diff --git a/bundler-tests/browser/webpack-4/package.json b/bundler-tests/browser/webpack-4/package.json
index f3ae814d55c..48dd2b3dc53 100644
--- a/bundler-tests/browser/webpack-4/package.json
+++ b/bundler-tests/browser/webpack-4/package.json
@@ -1,42 +1,34 @@
{
- "name": "webpack-4-bundle-test",
+ "name": "bundler-tests-browser-webpack-4",
"private": true,
- "version": "0.208.0",
- "description": "Test app for logs in webpack 4",
"type": "module",
"scripts": {
- "test:bundle": "npm i && webpack --config webpack.config.mjs"
+ "test:bundle": "npm i && node test-bundle.mjs"
},
- "repository": {
- "type": "git",
- "url": "git+ssh://git@github.com/open-telemetry/opentelemetry-js.git"
- },
- "keywords": [
- "opentelemetry",
- "web",
- "events"
- ],
- "engines": {
- "node": "^18.19.0 || >=20.6.0"
- },
- "author": "OpenTelemetry Authors",
- "license": "Apache-2.0",
- "bugs": {
- "url": "https://github.com/open-telemetry/opentelemetry-js/issues"
+ "dependencies": {
+ "@opentelemetry/api": "file:../../../api",
+ "@opentelemetry/api-logs": "file:../../../experimental/packages/api-logs",
+ "@opentelemetry/core": "file:../../../packages/opentelemetry-core",
+ "@opentelemetry/exporter-logs-otlp-http": "file:../../../experimental/packages/exporter-logs-otlp-http",
+ "@opentelemetry/exporter-metrics-otlp-http": "file:../../../experimental/packages/opentelemetry-exporter-metrics-otlp-http",
+ "@opentelemetry/exporter-trace-otlp-http": "file:../../../experimental/packages/exporter-trace-otlp-http",
+ "@opentelemetry/instrumentation": "file:../../../experimental/packages/opentelemetry-instrumentation",
+ "@opentelemetry/instrumentation-fetch": "file:../../../experimental/packages/opentelemetry-instrumentation-fetch",
+ "@opentelemetry/instrumentation-xml-http-request": "file:../../../experimental/packages/opentelemetry-instrumentation-xml-http-request",
+ "@opentelemetry/opentelemetry-browser-detector": "file:../../../experimental/packages/opentelemetry-browser-detector",
+ "@opentelemetry/propagator-b3": "file:../../../packages/opentelemetry-propagator-b3",
+ "@opentelemetry/resources": "file:../../../packages/opentelemetry-resources",
+ "@opentelemetry/sdk-logs": "file:../../../experimental/packages/sdk-logs",
+ "@opentelemetry/sdk-metrics": "file:../../../packages/sdk-metrics",
+ "@opentelemetry/sdk-trace-base": "file:../../../packages/opentelemetry-sdk-trace-base",
+ "@opentelemetry/sdk-trace-web": "file:../../../packages/opentelemetry-sdk-trace-web"
},
"devDependencies": {
"@babel/core": "^7.28.5",
"@babel/preset-env": "^7.28.5",
+ "@types/webpack": "^4",
"babel-loader": "^8.0.0",
- "html-webpack-plugin": "^4.5.2",
"webpack": "^4",
"webpack-cli": "^4"
- },
- "dependencies": {
- "@opentelemetry/api": "file:../../../api",
- "@opentelemetry/api-logs": "file:../../../experimental/packages/api-logs",
- "@opentelemetry/exporter-logs-otlp-http": "file:../../../experimental/packages/exporter-logs-otlp-http",
- "@opentelemetry/sdk-logs": "file:../../../experimental/packages/sdk-logs"
- },
- "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/bundler-tests/browser/webpack-4"
+ }
}
diff --git a/bundler-tests/browser/webpack-4/project.json b/bundler-tests/browser/webpack-4/project.json
index 4b693cd2b5e..3cfe6c9b8c6 100644
--- a/bundler-tests/browser/webpack-4/project.json
+++ b/bundler-tests/browser/webpack-4/project.json
@@ -1,3 +1,3 @@
{
- "name": "webpack-4-bundle-test"
+ "name": "bundler-tests-browser-webpack-4"
}
diff --git a/bundler-tests/browser/webpack-4/src/index.js b/bundler-tests/browser/webpack-4/src/index.js
index 20129b60444..25ade8465c3 100644
--- a/bundler-tests/browser/webpack-4/src/index.js
+++ b/bundler-tests/browser/webpack-4/src/index.js
@@ -1,18 +1,51 @@
-import { setupOpenTelemetry } from './opentelemetry.js';
+import { DiagConsoleLogger, diag } from '@opentelemetry/api';
import { logs } from '@opentelemetry/api-logs';
+import { W3CTraceContextPropagator } from '@opentelemetry/core';
+import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
+import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
+import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
+import { InstrumentationBase } from '@opentelemetry/instrumentation';
+import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
+import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';
+import { browserDetector } from '@opentelemetry/opentelemetry-browser-detector';
+import { B3Propagator } from '@opentelemetry/propagator-b3';
+import { defaultServiceName } from '@opentelemetry/resources';
+import {
+ LoggerProvider,
+ SimpleLogRecordProcessor,
+} from '@opentelemetry/sdk-logs';
+import { MeterProvider } from '@opentelemetry/sdk-metrics';
+import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
+import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
-// Setup SDK and register with API, then obtain logger from API.
-setupOpenTelemetry();
-const logger = logs.getLogger('bundle-test-webpack');
+diag.setLogger(new DiagConsoleLogger());
+
+logs.setGlobalLoggerProvider(
+ new LoggerProvider({
+ processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
+ })
+);
-window.addEventListener('load', () => {
- console.log('loaded');
- const emitEventButton = document.getElementById('emit-event-button');
- emitEventButton.addEventListener('click', () => {
- console.log('clicked');
- logger.emit({
- body: 'test-event-body',
- eventName: 'custom.event',
- });
- });
+const logger = logs.getLogger('bundle-test-webpack');
+logger.emit({
+ body: defaultServiceName(),
+ eventName: 'custom.event',
});
+
+class TestInstrumentation extends InstrumentationBase {
+ init() {
+ return [];
+ }
+}
+
+new TestInstrumentation('test', '0.0.0');
+new BasicTracerProvider();
+new MeterProvider();
+new OTLPTraceExporter();
+new OTLPMetricExporter();
+new W3CTraceContextPropagator();
+new B3Propagator();
+new WebTracerProvider();
+new FetchInstrumentation();
+new XMLHttpRequestInstrumentation();
+void browserDetector;
diff --git a/bundler-tests/browser/webpack-4/src/opentelemetry.js b/bundler-tests/browser/webpack-4/src/opentelemetry.js
deleted file mode 100644
index e75013bf29d..00000000000
--- a/bundler-tests/browser/webpack-4/src/opentelemetry.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { logs } from '@opentelemetry/api-logs';
-import { diag, DiagConsoleLogger } from '@opentelemetry/api';
-import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
-import {
- LoggerProvider,
- SimpleLogRecordProcessor,
-} from '@opentelemetry/sdk-logs';
-
-export function setupOpenTelemetry() {
- // setup diagnostics
- diag.setLogger({
- logger: new DiagConsoleLogger(),
- options: {
- logLevel: 'info',
- },
- });
-
- // setup logs
- logs.setGlobalLoggerProvider(
- new LoggerProvider({
- // SimpleLogRecordProcessor is for testing only, do not use in production.
- processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
- })
- );
-}
diff --git a/bundler-tests/browser/webpack-4/test-bundle.mjs b/bundler-tests/browser/webpack-4/test-bundle.mjs
new file mode 100644
index 00000000000..be40d8f2ad0
--- /dev/null
+++ b/bundler-tests/browser/webpack-4/test-bundle.mjs
@@ -0,0 +1,30 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import webpack from 'webpack';
+import config from './webpack.config.mjs';
+
+const compiler = webpack(config);
+
+compiler.run((err, stats) => {
+ if (compiler.close) compiler.close(() => {});
+
+ if (err) {
+ console.error(err);
+ process.exit(1);
+ }
+
+ if (stats.hasErrors()) {
+ console.error(stats.compilation.errors.map(e => e.message).join('\n'));
+ process.exit(1);
+ }
+
+ if (stats.hasWarnings()) {
+ console.error(stats.compilation.warnings.map(w => w.message).join('\n'));
+ process.exit(1);
+ }
+
+ console.log('webpack 4 build succeeded for browser');
+});
diff --git a/bundler-tests/browser/webpack-4/webpack.config.mjs b/bundler-tests/browser/webpack-4/webpack.config.mjs
index b9e8adf90cd..a2cb22ef5e9 100644
--- a/bundler-tests/browser/webpack-4/webpack.config.mjs
+++ b/bundler-tests/browser/webpack-4/webpack.config.mjs
@@ -1,13 +1,14 @@
-import { fileURLToPath } from 'url';
-import path from 'path';
-import HtmlWebpackPlugin from 'html-webpack-plugin';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
/** @type {import('./node_modules/@types/webpack').Configuration} */
export default {
- mode: 'development',
+ mode: 'production',
entry: './src/index.js',
+ target: 'web',
+ performance: { hints: false },
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
@@ -34,15 +35,4 @@ export default {
},
],
},
- devServer: {
- static: {
- directory: path.resolve(__dirname, 'dist/'),
- },
- },
- plugins: [
- new HtmlWebpackPlugin({
- title: 'Development',
- template: 'index.html',
- }),
- ],
};
diff --git a/bundler-tests/browser/webpack-5/index.html b/bundler-tests/browser/webpack-5/index.html
deleted file mode 100644
index 6782dc02ac4..00000000000
--- a/bundler-tests/browser/webpack-5/index.html
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
- OpenTelemetry example
-
-
-
-
- Example of using the OpenTelemetry Logs SDK
-
-
-
-
diff --git a/bundler-tests/browser/webpack-5/package.json b/bundler-tests/browser/webpack-5/package.json
index 4a2d358dc23..44e6e32bd7e 100644
--- a/bundler-tests/browser/webpack-5/package.json
+++ b/bundler-tests/browser/webpack-5/package.json
@@ -1,41 +1,32 @@
{
- "name": "webpack-5-bundle-test",
+ "name": "bundler-tests-browser-webpack-5",
"private": true,
- "version": "0.208.0",
- "description": "Test app for logs in webpack 5",
"type": "module",
"scripts": {
- "test:bundle": "npm i && webpack --config webpack.config.mjs",
+ "test:bundle": "npm i && node test-bundle.mjs",
"start": "npm i && webpack serve --config webpack.config.mjs --open"
},
- "repository": {
- "type": "git",
- "url": "git+ssh://git@github.com/open-telemetry/opentelemetry-js.git"
- },
- "keywords": [
- "opentelemetry",
- "web",
- "events"
- ],
- "engines": {
- "node": "^18.19.0 || >=20.6.0"
- },
- "author": "OpenTelemetry Authors",
- "license": "Apache-2.0",
- "bugs": {
- "url": "https://github.com/open-telemetry/opentelemetry-js/issues"
- },
- "devDependencies": {
- "html-webpack-plugin": "^5",
- "webpack": "^5",
- "webpack-cli": "^6",
- "webpack-dev-server": "^5"
- },
"dependencies": {
"@opentelemetry/api": "file:../../../api",
"@opentelemetry/api-logs": "file:../../../experimental/packages/api-logs",
+ "@opentelemetry/core": "file:../../../packages/opentelemetry-core",
"@opentelemetry/exporter-logs-otlp-http": "file:../../../experimental/packages/exporter-logs-otlp-http",
- "@opentelemetry/sdk-logs": "file:../../../experimental/packages/sdk-logs"
+ "@opentelemetry/exporter-metrics-otlp-http": "file:../../../experimental/packages/opentelemetry-exporter-metrics-otlp-http",
+ "@opentelemetry/exporter-trace-otlp-http": "file:../../../experimental/packages/exporter-trace-otlp-http",
+ "@opentelemetry/instrumentation": "file:../../../experimental/packages/opentelemetry-instrumentation",
+ "@opentelemetry/instrumentation-fetch": "file:../../../experimental/packages/opentelemetry-instrumentation-fetch",
+ "@opentelemetry/instrumentation-xml-http-request": "file:../../../experimental/packages/opentelemetry-instrumentation-xml-http-request",
+ "@opentelemetry/opentelemetry-browser-detector": "file:../../../experimental/packages/opentelemetry-browser-detector",
+ "@opentelemetry/propagator-b3": "file:../../../packages/opentelemetry-propagator-b3",
+ "@opentelemetry/resources": "file:../../../packages/opentelemetry-resources",
+ "@opentelemetry/sdk-logs": "file:../../../experimental/packages/sdk-logs",
+ "@opentelemetry/sdk-metrics": "file:../../../packages/sdk-metrics",
+ "@opentelemetry/sdk-trace-base": "file:../../../packages/opentelemetry-sdk-trace-base",
+ "@opentelemetry/sdk-trace-web": "file:../../../packages/opentelemetry-sdk-trace-web"
},
- "homepage": "https://github.com/open-telemetry/opentelemetry-js/tree/main/bundler-tests/browser/webpack-5"
+ "devDependencies": {
+ "@types/webpack": "^5",
+ "webpack": "^5",
+ "webpack-cli": "^6"
+ }
}
diff --git a/bundler-tests/browser/webpack-5/project.json b/bundler-tests/browser/webpack-5/project.json
index 333c63e183b..d812d66a20c 100644
--- a/bundler-tests/browser/webpack-5/project.json
+++ b/bundler-tests/browser/webpack-5/project.json
@@ -1,3 +1,3 @@
{
- "name": "webpack-5-bundle-test"
+ "name": "bundler-tests-browser-webpack-5"
}
diff --git a/bundler-tests/browser/webpack-5/src/index.js b/bundler-tests/browser/webpack-5/src/index.js
index 42555bf6669..25ade8465c3 100644
--- a/bundler-tests/browser/webpack-5/src/index.js
+++ b/bundler-tests/browser/webpack-5/src/index.js
@@ -1,16 +1,51 @@
-import { setupOpenTelemetry } from './opentelemetry.js';
+import { DiagConsoleLogger, diag } from '@opentelemetry/api';
import { logs } from '@opentelemetry/api-logs';
+import { W3CTraceContextPropagator } from '@opentelemetry/core';
+import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
+import { OTLPMetricExporter } from '@opentelemetry/exporter-metrics-otlp-http';
+import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
+import { InstrumentationBase } from '@opentelemetry/instrumentation';
+import { FetchInstrumentation } from '@opentelemetry/instrumentation-fetch';
+import { XMLHttpRequestInstrumentation } from '@opentelemetry/instrumentation-xml-http-request';
+import { browserDetector } from '@opentelemetry/opentelemetry-browser-detector';
+import { B3Propagator } from '@opentelemetry/propagator-b3';
+import { defaultServiceName } from '@opentelemetry/resources';
+import {
+ LoggerProvider,
+ SimpleLogRecordProcessor,
+} from '@opentelemetry/sdk-logs';
+import { MeterProvider } from '@opentelemetry/sdk-metrics';
+import { BasicTracerProvider } from '@opentelemetry/sdk-trace-base';
+import { WebTracerProvider } from '@opentelemetry/sdk-trace-web';
-// Setup SDK and register with API, then obtain logger from API.
-setupOpenTelemetry();
-const logger = logs.getLogger('bundle-test-webpack');
+diag.setLogger(new DiagConsoleLogger());
+
+logs.setGlobalLoggerProvider(
+ new LoggerProvider({
+ processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
+ })
+);
-console.log('loaded');
-const emitEventButton = document.getElementById('emit-event-button');
-emitEventButton.addEventListener('click', () => {
- console.log('clicked');
- logger.emit({
- body: 'test-event-body',
- eventName: 'custom.event',
- });
+const logger = logs.getLogger('bundle-test-webpack');
+logger.emit({
+ body: defaultServiceName(),
+ eventName: 'custom.event',
});
+
+class TestInstrumentation extends InstrumentationBase {
+ init() {
+ return [];
+ }
+}
+
+new TestInstrumentation('test', '0.0.0');
+new BasicTracerProvider();
+new MeterProvider();
+new OTLPTraceExporter();
+new OTLPMetricExporter();
+new W3CTraceContextPropagator();
+new B3Propagator();
+new WebTracerProvider();
+new FetchInstrumentation();
+new XMLHttpRequestInstrumentation();
+void browserDetector;
diff --git a/bundler-tests/browser/webpack-5/src/opentelemetry.js b/bundler-tests/browser/webpack-5/src/opentelemetry.js
deleted file mode 100644
index e75013bf29d..00000000000
--- a/bundler-tests/browser/webpack-5/src/opentelemetry.js
+++ /dev/null
@@ -1,25 +0,0 @@
-import { logs } from '@opentelemetry/api-logs';
-import { diag, DiagConsoleLogger } from '@opentelemetry/api';
-import { OTLPLogExporter } from '@opentelemetry/exporter-logs-otlp-http';
-import {
- LoggerProvider,
- SimpleLogRecordProcessor,
-} from '@opentelemetry/sdk-logs';
-
-export function setupOpenTelemetry() {
- // setup diagnostics
- diag.setLogger({
- logger: new DiagConsoleLogger(),
- options: {
- logLevel: 'info',
- },
- });
-
- // setup logs
- logs.setGlobalLoggerProvider(
- new LoggerProvider({
- // SimpleLogRecordProcessor is for testing only, do not use in production.
- processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
- })
- );
-}
diff --git a/bundler-tests/browser/webpack-5/test-bundle.mjs b/bundler-tests/browser/webpack-5/test-bundle.mjs
new file mode 100644
index 00000000000..f339eacccdd
--- /dev/null
+++ b/bundler-tests/browser/webpack-5/test-bundle.mjs
@@ -0,0 +1,30 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import webpack from 'webpack';
+import config from './webpack.config.mjs';
+
+const compiler = webpack(config);
+
+compiler.run((err, stats) => {
+ if (compiler.close) compiler.close(() => {});
+
+ if (err) {
+ console.error(err);
+ process.exit(1);
+ }
+
+ if (stats.hasErrors()) {
+ console.error(stats.compilation.errors.map(e => e.message).join('\n'));
+ process.exit(1);
+ }
+
+ if (stats.hasWarnings()) {
+ console.error(stats.compilation.warnings.map(w => w.message).join('\n'));
+ process.exit(1);
+ }
+
+ console.log('webpack 5 build succeeded for browser');
+});
diff --git a/bundler-tests/browser/webpack-5/webpack.config.mjs b/bundler-tests/browser/webpack-5/webpack.config.mjs
index 3fcffeb3a2c..c8776ac15a9 100644
--- a/bundler-tests/browser/webpack-5/webpack.config.mjs
+++ b/bundler-tests/browser/webpack-5/webpack.config.mjs
@@ -1,26 +1,15 @@
-import { fileURLToPath } from 'url';
-import path from 'path';
-import HtmlWebpackPlugin from 'html-webpack-plugin';
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
/** @type {import('./node_modules/@types/webpack').Configuration} */
export default {
- mode: 'development',
+ mode: 'production',
entry: './src/index.js',
+ target: 'web',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist'),
},
- devServer: {
- static: {
- directory: path.resolve(__dirname, 'dist/'),
- },
- },
- plugins: [
- new HtmlWebpackPlugin({
- title: 'Development',
- template: 'index.html',
- }),
- ],
};
diff --git a/bundler-tests/node/webpack-4/.npmrc b/bundler-tests/node/webpack-4/.npmrc
new file mode 100644
index 00000000000..6c93bcba751
--- /dev/null
+++ b/bundler-tests/node/webpack-4/.npmrc
@@ -0,0 +1,2 @@
+package-lock=false
+install-links=false
diff --git a/bundler-tests/node/webpack-4/package.json b/bundler-tests/node/webpack-4/package.json
new file mode 100644
index 00000000000..14a006075d9
--- /dev/null
+++ b/bundler-tests/node/webpack-4/package.json
@@ -0,0 +1,30 @@
+{
+ "name": "bundler-tests-node-webpack-4",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "test:bundle": "npm i && node test-bundle.mjs"
+ },
+ "dependencies": {
+ "@opentelemetry/api": "file:../../../api",
+ "@opentelemetry/api-logs": "file:../../../experimental/packages/api-logs",
+ "@opentelemetry/core": "file:../../../packages/opentelemetry-core",
+ "@opentelemetry/exporter-logs-otlp-http": "file:../../../experimental/packages/exporter-logs-otlp-http",
+ "@opentelemetry/exporter-metrics-otlp-http": "file:../../../experimental/packages/opentelemetry-exporter-metrics-otlp-http",
+ "@opentelemetry/exporter-trace-otlp-http": "file:../../../experimental/packages/exporter-trace-otlp-http",
+ "@opentelemetry/instrumentation": "file:../../../experimental/packages/opentelemetry-instrumentation",
+ "@opentelemetry/propagator-b3": "file:../../../packages/opentelemetry-propagator-b3",
+ "@opentelemetry/resources": "file:../../../packages/opentelemetry-resources",
+ "@opentelemetry/sdk-logs": "file:../../../experimental/packages/sdk-logs",
+ "@opentelemetry/sdk-metrics": "file:../../../packages/sdk-metrics",
+ "@opentelemetry/sdk-trace-base": "file:../../../packages/opentelemetry-sdk-trace-base"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.28.5",
+ "@babel/preset-env": "^7.28.5",
+ "@types/webpack": "^4",
+ "babel-loader": "^8.0.0",
+ "webpack": "^4",
+ "webpack-cli": "^4"
+ }
+}
diff --git a/bundler-tests/node/webpack-4/project.json b/bundler-tests/node/webpack-4/project.json
new file mode 100644
index 00000000000..3453d428170
--- /dev/null
+++ b/bundler-tests/node/webpack-4/project.json
@@ -0,0 +1,3 @@
+{
+ "name": "bundler-tests-node-webpack-4"
+}
diff --git a/bundler-tests/node/webpack-4/src/index.js b/bundler-tests/node/webpack-4/src/index.js
new file mode 100644
index 00000000000..61dd4923357
--- /dev/null
+++ b/bundler-tests/node/webpack-4/src/index.js
@@ -0,0 +1,52 @@
+const { diag, DiagConsoleLogger } = require('@opentelemetry/api');
+const { logs } = require('@opentelemetry/api-logs');
+const { InstrumentationBase } = require('@opentelemetry/instrumentation');
+const { OTLPLogExporter } = require('@opentelemetry/exporter-logs-otlp-http');
+const {
+ LoggerProvider,
+ SimpleLogRecordProcessor,
+} = require('@opentelemetry/sdk-logs');
+const { W3CTraceContextPropagator } = require('@opentelemetry/core');
+const {
+ OTLPMetricExporter,
+} = require('@opentelemetry/exporter-metrics-otlp-http');
+const {
+ OTLPTraceExporter,
+} = require('@opentelemetry/exporter-trace-otlp-http');
+const { B3Propagator } = require('@opentelemetry/propagator-b3');
+const { defaultServiceName } = require('@opentelemetry/resources');
+const { MeterProvider } = require('@opentelemetry/sdk-metrics');
+const { BasicTracerProvider } = require('@opentelemetry/sdk-trace-base');
+
+diag.setLogger({
+ logger: new DiagConsoleLogger(),
+ options: {
+ logLevel: 'info',
+ },
+});
+
+logs.setGlobalLoggerProvider(
+ new LoggerProvider({
+ processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
+ })
+);
+
+const logger = logs.getLogger('bundle-test-webpack');
+logger.emit({
+ body: defaultServiceName(),
+ eventName: 'custom.event',
+});
+
+class TestInstrumentation extends InstrumentationBase {
+ init() {
+ return [];
+ }
+}
+
+new TestInstrumentation('test', '0.0.0');
+new BasicTracerProvider();
+new MeterProvider();
+new OTLPTraceExporter();
+new OTLPMetricExporter();
+new W3CTraceContextPropagator();
+new B3Propagator();
diff --git a/bundler-tests/node/webpack-4/test-bundle.mjs b/bundler-tests/node/webpack-4/test-bundle.mjs
new file mode 100644
index 00000000000..1c40e49dd41
--- /dev/null
+++ b/bundler-tests/node/webpack-4/test-bundle.mjs
@@ -0,0 +1,40 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import webpack from 'webpack';
+import config from './webpack.config.mjs';
+
+const compiler = webpack(config);
+
+compiler.run((err, stats) => {
+ if (compiler.close) compiler.close(() => { });
+
+ if (err) {
+ console.error(err);
+ process.exit(1);
+ }
+
+ // Assert the known protobuf dynamic-require warning. This exit(0) is intentional:
+ // the test passes while the bug exists and will break when it is fixed, signalling
+ // that this block should be removed and warnings should be treated as errors again.
+ if (stats.hasWarnings() && !stats.hasErrors()) {
+ const expectedMsg =
+ 'Critical dependency: require function is used in a way in which dependencies cannot be statically extracted';
+ if (stats.compilation.warnings.every(w => w.message === expectedMsg))
+ process.exit(0);
+ }
+
+ if (stats.hasErrors()) {
+ console.error(stats.compilation.errors.map(e => e.message).join('\n'));
+ process.exit(1);
+ }
+
+ if (stats.hasWarnings()) {
+ console.error(stats.compilation.warnings.map(w => w.message).join('\n'));
+ process.exit(1);
+ }
+
+ console.log('webpack 4 build succeeded in Node');
+});
diff --git a/bundler-tests/node/webpack-4/webpack.config.mjs b/bundler-tests/node/webpack-4/webpack.config.mjs
new file mode 100644
index 00000000000..48b9ba45c9f
--- /dev/null
+++ b/bundler-tests/node/webpack-4/webpack.config.mjs
@@ -0,0 +1,36 @@
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+
+/** @type {import('./node_modules/@types/webpack').Configuration} */
+export default {
+ mode: 'production',
+ entry: './src/index.js',
+ target: 'node',
+ output: {
+ filename: 'bundle.js',
+ path: path.resolve(__dirname, 'dist'),
+ },
+ resolve: {
+ alias: {
+ // Webpack 4 doesn't support package.json exports field, so we need to manually map the node-http subpath
+ '@opentelemetry/otlp-exporter-base/node-http':
+ '@opentelemetry/otlp-exporter-base/build/esm/index-node-http.js',
+ },
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(?:js|mjs|cjs)$/,
+ exclude: /node_modules\/(?!@opentelemetry)/,
+ use: {
+ loader: 'babel-loader',
+ options: {
+ presets: [['@babel/preset-env']],
+ },
+ },
+ },
+ ],
+ },
+};
diff --git a/bundler-tests/node/webpack-5/.npmrc b/bundler-tests/node/webpack-5/.npmrc
new file mode 100644
index 00000000000..6c93bcba751
--- /dev/null
+++ b/bundler-tests/node/webpack-5/.npmrc
@@ -0,0 +1,2 @@
+package-lock=false
+install-links=false
diff --git a/bundler-tests/node/webpack-5/package.json b/bundler-tests/node/webpack-5/package.json
new file mode 100644
index 00000000000..f4c245d1071
--- /dev/null
+++ b/bundler-tests/node/webpack-5/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "bundler-tests-node-webpack-5",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "test:bundle": "npm i && node test-bundle.mjs"
+ },
+ "dependencies": {
+ "@opentelemetry/api": "file:../../../api",
+ "@opentelemetry/api-logs": "file:../../../experimental/packages/api-logs",
+ "@opentelemetry/core": "file:../../../packages/opentelemetry-core",
+ "@opentelemetry/exporter-logs-otlp-http": "file:../../../experimental/packages/exporter-logs-otlp-http",
+ "@opentelemetry/exporter-metrics-otlp-http": "file:../../../experimental/packages/opentelemetry-exporter-metrics-otlp-http",
+ "@opentelemetry/exporter-trace-otlp-http": "file:../../../experimental/packages/exporter-trace-otlp-http",
+ "@opentelemetry/instrumentation": "file:../../../experimental/packages/opentelemetry-instrumentation",
+ "@opentelemetry/propagator-b3": "file:../../../packages/opentelemetry-propagator-b3",
+ "@opentelemetry/resources": "file:../../../packages/opentelemetry-resources",
+ "@opentelemetry/sdk-logs": "file:../../../experimental/packages/sdk-logs",
+ "@opentelemetry/sdk-metrics": "file:../../../packages/sdk-metrics",
+ "@opentelemetry/sdk-trace-base": "file:../../../packages/opentelemetry-sdk-trace-base"
+ },
+ "devDependencies": {
+ "@types/webpack": "^5",
+ "webpack": "^5",
+ "webpack-cli": "^6"
+ }
+}
diff --git a/bundler-tests/node/webpack-5/project.json b/bundler-tests/node/webpack-5/project.json
new file mode 100644
index 00000000000..8e312359b61
--- /dev/null
+++ b/bundler-tests/node/webpack-5/project.json
@@ -0,0 +1,3 @@
+{
+ "name": "bundler-tests-node-webpack-5"
+}
diff --git a/bundler-tests/node/webpack-5/src/index.js b/bundler-tests/node/webpack-5/src/index.js
new file mode 100644
index 00000000000..61dd4923357
--- /dev/null
+++ b/bundler-tests/node/webpack-5/src/index.js
@@ -0,0 +1,52 @@
+const { diag, DiagConsoleLogger } = require('@opentelemetry/api');
+const { logs } = require('@opentelemetry/api-logs');
+const { InstrumentationBase } = require('@opentelemetry/instrumentation');
+const { OTLPLogExporter } = require('@opentelemetry/exporter-logs-otlp-http');
+const {
+ LoggerProvider,
+ SimpleLogRecordProcessor,
+} = require('@opentelemetry/sdk-logs');
+const { W3CTraceContextPropagator } = require('@opentelemetry/core');
+const {
+ OTLPMetricExporter,
+} = require('@opentelemetry/exporter-metrics-otlp-http');
+const {
+ OTLPTraceExporter,
+} = require('@opentelemetry/exporter-trace-otlp-http');
+const { B3Propagator } = require('@opentelemetry/propagator-b3');
+const { defaultServiceName } = require('@opentelemetry/resources');
+const { MeterProvider } = require('@opentelemetry/sdk-metrics');
+const { BasicTracerProvider } = require('@opentelemetry/sdk-trace-base');
+
+diag.setLogger({
+ logger: new DiagConsoleLogger(),
+ options: {
+ logLevel: 'info',
+ },
+});
+
+logs.setGlobalLoggerProvider(
+ new LoggerProvider({
+ processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
+ })
+);
+
+const logger = logs.getLogger('bundle-test-webpack');
+logger.emit({
+ body: defaultServiceName(),
+ eventName: 'custom.event',
+});
+
+class TestInstrumentation extends InstrumentationBase {
+ init() {
+ return [];
+ }
+}
+
+new TestInstrumentation('test', '0.0.0');
+new BasicTracerProvider();
+new MeterProvider();
+new OTLPTraceExporter();
+new OTLPMetricExporter();
+new W3CTraceContextPropagator();
+new B3Propagator();
diff --git a/bundler-tests/node/webpack-5/test-bundle.mjs b/bundler-tests/node/webpack-5/test-bundle.mjs
new file mode 100644
index 00000000000..89655434fe8
--- /dev/null
+++ b/bundler-tests/node/webpack-5/test-bundle.mjs
@@ -0,0 +1,30 @@
+/*
+ * Copyright The OpenTelemetry Authors
+ * SPDX-License-Identifier: Apache-2.0
+ */
+
+import webpack from 'webpack';
+import config from './webpack.config.mjs';
+
+const compiler = webpack(config);
+
+compiler.run((err, stats) => {
+ if (compiler.close) compiler.close(() => {});
+
+ if (err) {
+ console.error(err);
+ process.exit(1);
+ }
+
+ if (stats.hasErrors()) {
+ console.error(stats.compilation.errors.map(e => e.message).join('\n'));
+ process.exit(1);
+ }
+
+ if (stats.hasWarnings()) {
+ console.error(stats.compilation.warnings.map(w => w.message).join('\n'));
+ process.exit(1);
+ }
+
+ console.log('webpack 5 build succeeded in Node');
+});
diff --git a/bundler-tests/node/webpack-5/webpack.config.mjs b/bundler-tests/node/webpack-5/webpack.config.mjs
new file mode 100644
index 00000000000..828f3bba0e9
--- /dev/null
+++ b/bundler-tests/node/webpack-5/webpack.config.mjs
@@ -0,0 +1,15 @@
+import path from 'node:path';
+import { fileURLToPath } from 'node:url';
+
+const __dirname = path.dirname(fileURLToPath(import.meta.url));
+
+/** @type {import('./node_modules/@types/webpack').Configuration} */
+export default {
+ mode: 'production',
+ entry: './src/index.js',
+ target: 'node',
+ output: {
+ filename: 'bundle.js',
+ path: path.resolve(__dirname, 'dist'),
+ },
+};
diff --git a/package-lock.json b/package-lock.json
index 801c9c94695..957c03c8df7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5602,9 +5602,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5619,9 +5616,6 @@
"arm64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5636,9 +5630,6 @@
"x64"
],
"dev": true,
- "libc": [
- "glibc"
- ],
"license": "MIT",
"optional": true,
"os": [
@@ -5653,9 +5644,6 @@
"x64"
],
"dev": true,
- "libc": [
- "musl"
- ],
"license": "MIT",
"optional": true,
"os": [