|
2 | 2 | /* eslint-disable max-lines */
|
3 | 3 | import { getSentryRelease } from '@sentry/node';
|
4 | 4 | import { arrayify, dropUndefinedKeys, escapeStringForRegex, loadModule, logger } from '@sentry/utils';
|
| 5 | +import type SentryCliPlugin from '@sentry/webpack-plugin'; |
5 | 6 | import * as chalk from 'chalk';
|
6 | 7 | import * as fs from 'fs';
|
7 | 8 | import * as path from 'path';
|
@@ -312,15 +313,16 @@ export function constructWebpackConfigFunction(
|
312 | 313 | // without, the option to use `hidden-source-map` only applies to the client-side build.
|
313 | 314 | newConfig.devtool = userSentryOptions.hideSourceMaps && !isServer ? 'hidden-source-map' : 'source-map';
|
314 | 315 |
|
315 |
| - const SentryWebpackPlugin = loadModule('@sentry/webpack-plugin'); |
316 |
| - |
317 |
| - newConfig.plugins = newConfig.plugins || []; |
318 |
| - newConfig.plugins.push( |
319 |
| - // @ts-expect-error - this exists, the dynamic import just doesn't know about it |
320 |
| - new SentryWebpackPlugin( |
321 |
| - getWebpackPluginOptions(buildContext, userSentryWebpackPluginOptions, userSentryOptions), |
322 |
| - ), |
323 |
| - ); |
| 316 | + const SentryWebpackPlugin = loadModule<SentryCliPlugin>('@sentry/webpack-plugin'); |
| 317 | + if (SentryWebpackPlugin) { |
| 318 | + newConfig.plugins = newConfig.plugins || []; |
| 319 | + newConfig.plugins.push( |
| 320 | + // @ts-expect-error - this exists, the dynamic import just doesn't know about it |
| 321 | + new SentryWebpackPlugin( |
| 322 | + getWebpackPluginOptions(buildContext, userSentryWebpackPluginOptions, userSentryOptions), |
| 323 | + ), |
| 324 | + ); |
| 325 | + } |
324 | 326 | }
|
325 | 327 | }
|
326 | 328 |
|
@@ -769,10 +771,10 @@ function shouldEnableWebpackPlugin(buildContext: BuildContext, userSentryOptions
|
769 | 771 | // architecture-specific version of the `sentry-cli` binary. If `yarn install`, `npm install`, or `npm ci` are run
|
770 | 772 | // with the `--ignore-scripts` option, this will be blocked and the missing binary will cause an error when users
|
771 | 773 | // try to build their apps.
|
772 |
| - const SentryWebpackPlugin = loadModule('@sentry/webpack-plugin'); |
| 774 | + const SentryWebpackPlugin = loadModule<SentryCliPlugin>('@sentry/webpack-plugin'); |
773 | 775 |
|
774 | 776 | // @ts-expect-error - this exists, the dynamic import just doesn't know it
|
775 |
| - if (!SentryWebpackPlugin.cliBinaryExists()) { |
| 777 | + if (!SentryWebpackPlugin || !SentryWebpackPlugin.cliBinaryExists()) { |
776 | 778 | // eslint-disable-next-line no-console
|
777 | 779 | console.error(
|
778 | 780 | `${chalk.red('error')} - ${chalk.bold('Sentry CLI binary not found.')} Source maps will not be uploaded.\n`,
|
|
0 commit comments