Skip to content

Commit

Permalink
fix package resolution bug
Browse files Browse the repository at this point in the history
  • Loading branch information
shuding committed Nov 24, 2022
1 parent bcb0e28 commit 042e15d
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 15 deletions.
21 changes: 6 additions & 15 deletions packages/next/build/webpack/plugins/flight-client-entry-plugin.ts
Expand Up @@ -379,23 +379,14 @@ export class FlightClientEntryPlugin {
compilation.moduleGraph.getResolvedModule(dependencyToFilter)
if (!mod) return

// Keep client imports as simple
// native or installed js module: -> raw request, e.g. next/head
// client js or css: -> user request
const rawRequest = mod.rawRequest
// Request could be undefined or ''
if (!rawRequest) return

const isCSS = regexCSS.test(rawRequest)
const isLocal =
!isCSS &&
!rawRequest.startsWith('.') &&
!rawRequest.startsWith('/') &&
!rawRequest.startsWith(APP_DIR_ALIAS)

const modRequest: string | undefined = isLocal
? rawRequest
: mod.resourceResolveData?.path + mod.resourceResolveData?.query

// We have to always use the resolved request here to make sure the
// server and client are using the same module path (required by RSC), as
// the server compiler and client compiler have different resolve configs.
const modRequest: string | undefined =
mod.resourceResolveData?.path + mod.resourceResolveData?.query

// Ensure module is not walked again if it's already been visited
if (!visitedBySegment[entryRequest]) {
Expand Down
5 changes: 5 additions & 0 deletions test/e2e/app-dir/app-external.test.ts
Expand Up @@ -147,6 +147,11 @@ describe('app dir - external dependency', () => {
).toBe('rgb(255, 0, 0)')
})

it('should use the same export type for packages in both ssr and client', async () => {
const browser = await webdriver(next.url, '/client-dep')
expect(await browser.eval(`window.document.body.innerText`)).toBe('hello')
})

it('should handle external css modules in pages', async () => {
const browser = await webdriver(next.url, '/test-pages')

Expand Down
9 changes: 9 additions & 0 deletions test/e2e/app-dir/app-external/app/client-dep/page.js
@@ -0,0 +1,9 @@
import Foo from 'client-module'

export default function Index() {
return (
<div>
<Foo />
</div>
)
}
@@ -0,0 +1,3 @@
'use client'

module.exports = () => 'hello'
@@ -0,0 +1,3 @@
'use client'

export default () => 'hello'
@@ -0,0 +1,5 @@
{
"name": "client-module",
"main": "index.js",
"module": "index.mjs"
}

0 comments on commit 042e15d

Please sign in to comment.