|
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