diff --git a/packages/metro-resolver/src/__tests__/package-exports-test.js b/packages/metro-resolver/src/__tests__/package-exports-test.js index 89f8aad7ae..9b2787f30d 100644 --- a/packages/metro-resolver/src/__tests__/package-exports-test.js +++ b/packages/metro-resolver/src/__tests__/package-exports-test.js @@ -455,6 +455,24 @@ describe('with package exports resolution enabled', () => { expect(logWarning).not.toHaveBeenCalled(); }); }); + + describe('haste package', () => { + test('should resolve subpath in "exports"', () => { + const context = { + ...baseContext, + resolveHastePackage(name: string) { + if (name === 'test-pkg') { + return '/root/node_modules/test-pkg/package.json'; + } + return null; + }, + }; + expect(Resolver.resolve(context, 'test-pkg/foo.js', null)).toEqual({ + type: 'sourceFile', + filePath: '/root/node_modules/test-pkg/lib/foo.js', + }); + }); + }); }); describe('subpath patterns', () => { diff --git a/packages/metro-resolver/src/resolve.js b/packages/metro-resolver/src/resolve.js index 068ceee2a8..158d232330 100644 --- a/packages/metro-resolver/src/resolve.js +++ b/packages/metro-resolver/src/resolve.js @@ -206,7 +206,7 @@ function resolveHasteName( const packageDirPath = path.dirname(packageJsonPath); const pathInModule = moduleName.substring(packageName.length + 1); const potentialModulePath = path.join(packageDirPath, pathInModule); - const result = resolveModulePath(context, potentialModulePath, platform); + const result = resolvePackage(context, potentialModulePath, platform); if (result.type === 'resolved') { return result; }