Skip to content

Commit

Permalink
fix(v8/core): Pass module into loadModule (#15139)
Browse files Browse the repository at this point in the history
The `loadModule` function currently utilizes `require` to load modules
starting from the `@sentry/core` directory. This approach is
incompatible with package managers like pnpm, which do not hoist
dependencies. Consequently, when another module, such as @sentry/nextjs,
invokes `loadModule`, it fails to locate its own dependencies because
the search initiates within the @sentry/core tree.
  • Loading branch information
jrandolf authored and Lms24 committed Jan 27, 2025
1 parent a3ddff6 commit 2835094
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 6 deletions.
10 changes: 6 additions & 4 deletions packages/core/src/utils-hoist/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,24 +42,26 @@ export function dynamicRequire(mod: any, request: string): any {
* That is to mimic the behavior of `require.resolve` exactly.
*
* @param moduleName module name to require
* @param existingModule module to use for requiring
* @returns possibly required module
*/
export function loadModule<T>(moduleName: string): T | undefined {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
export function loadModule<T>(moduleName: string, existingModule: any = module): T | undefined {
let mod: T | undefined;

try {
// eslint-disable-next-line deprecation/deprecation
mod = dynamicRequire(module, moduleName);
mod = dynamicRequire(existingModule, moduleName);
} catch (e) {
// no-empty
}

if (!mod) {
try {
// eslint-disable-next-line deprecation/deprecation
const { cwd } = dynamicRequire(module, 'process');
const { cwd } = dynamicRequire(existingModule, 'process');
// eslint-disable-next-line deprecation/deprecation
mod = dynamicRequire(module, `${cwd()}/node_modules/${moduleName}`) as T;
mod = dynamicRequire(existingModule, `${cwd()}/node_modules/${moduleName}`) as T;
} catch (e) {
// no-empty
}
Expand Down
2 changes: 1 addition & 1 deletion packages/nextjs/src/config/webpack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ export function constructWebpackConfigFunction(
// Symbolication for dev-mode errors is done elsewhere.
if (!isDev) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const { sentryWebpackPlugin } = loadModule<{ sentryWebpackPlugin: any }>('@sentry/webpack-plugin') ?? {};
const { sentryWebpackPlugin } = loadModule<{ sentryWebpackPlugin: any }>('@sentry/webpack-plugin', module) ?? {};

if (sentryWebpackPlugin) {
if (!userSentryOptions.sourcemaps?.disable) {
Expand Down
2 changes: 1 addition & 1 deletion packages/remix/src/utils/instrumentServer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -448,7 +448,7 @@ const makeWrappedCreateRequestHandler = (options: RemixOptions) =>
export function instrumentServer(options: RemixOptions): void {
const pkg = loadModule<{
createRequestHandler: CreateRequestHandlerFunction;
}>('@remix-run/server-runtime');
}>('@remix-run/server-runtime', module);

if (!pkg) {
DEBUG_BUILD && logger.warn('Remix SDK was unable to require `@remix-run/server-runtime` package.');
Expand Down

0 comments on commit 2835094

Please sign in to comment.