Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Follow symlinks in resolveRequest #16369

Closed

Conversation

elliottsj
Copy link
Contributor

@elliottsj elliottsj commented Aug 20, 2020

As described in #15616 (comment), the 'react' module is undesirably externalized when using the pnpm package manager, due to the resolveRequest() function not following symbolic links.

Next.js currently uses resolve@1.11.0, which sets preserveSymlinks: true by default:

Note: this property is currently true by default but it will be changed to false in the next major version because Node's resolution algorithm does not preserve symlinks by default.

By setting preserveSymlinks: false, we get Node.js's default behaviour of following symlinks, so this issue is resolved.


Fixes #16988

@elliottsj
Copy link
Contributor Author

I'm currently testing this change, so this isn't totally ready for review, but put it up early to start getting feedback from CI builds, and early feedback from maintainers if they like.

@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 12.6s 12.7s ⚠️ +132ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +91 B
Page Load Tests Overall increase ✓
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.324 2.282 -0.04
/ avg req/sec 1075.91 1095.58 +19.67
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.269 1.271 0
/error-in-render avg req/sec 1970.58 1966.89 ⚠️ -3.69
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-512d5b9..081a.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-1203ff1..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 949 B 949 B
link.html gzip 955 B 955 B
withRouter.html gzip 940 B 940 B
Overall change 2.84 kB 2.84 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 14.3s 14.3s -79ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +91 B
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-512d5b9..081a.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-1203ff1..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.03 MB 1.03 MB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB
link.js 1.07 MB 1.07 MB
routerDirect.js 1.07 MB 1.07 MB
withRouter.js 1.07 MB 1.07 MB
Overall change 5.27 MB 5.27 MB
Commit: 6a46fe3

@elliottsj elliottsj force-pushed the resolve-dont-preserve-symlinks branch 3 times, most recently from 906add6 to 4fb1e6d Compare August 20, 2020 01:39
@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 13.7s 13.8s ⚠️ +181ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +92 B
Page Load Tests Overall increase ✓
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.57 2.571 0
/ avg req/sec 972.84 972.22 ⚠️ -0.62
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.555 1.502 -0.05
/error-in-render avg req/sec 1608.12 1664.07 +55.95
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-512d5b9..081a.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-1203ff1..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 949 B 949 B
link.html gzip 955 B 955 B
withRouter.html gzip 940 B 940 B
Overall change 2.84 kB 2.84 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 15.8s 15.9s ⚠️ +49ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +92 B
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-512d5b9..081a.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-1203ff1..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.03 MB 1.03 MB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB
link.js 1.07 MB 1.07 MB
routerDirect.js 1.07 MB 1.07 MB
withRouter.js 1.07 MB 1.07 MB
Overall change 5.27 MB 5.27 MB
Commit: 906add6

@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Failing test suites

Commit: 4fb1e6d

test/integration/config/test/index.test.js

  • Configuration > renders server config on the server only
  • Configuration > renders public config on the server only
  • Configuration > should have config available on the client
Expand output

● Configuration › renders server config on the server only

expect(received).toBe(expected) // Object.is equality

Expected: "secret"
Received: ""

  83 |   test('renders server config on the server only', async () => {
  84 |     const $ = await get$('/next-config')
> 85 |     expect($('#server-only').text()).toBe('secret')
     |                                      ^
  86 |   })
  87 | 
  88 |   test('renders public config on the server only', async () => {

  at Object.<anonymous> (integration/config/test/index.test.js:85:38)

● Configuration › renders public config on the server only

expect(received).toBe(expected) // Object.is equality

Expected: "/static"
Received: ""

  88 |   test('renders public config on the server only', async () => {
  89 |     const $ = await get$('/next-config')
> 90 |     expect($('#server-and-client').text()).toBe('/static')
     |                                            ^
  91 |   })
  92 | 
  93 |   test('renders the build id in development mode', async () => {

  at Object.<anonymous> (integration/config/test/index.test.js:90:44)

● Configuration › should have config available on the client

NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"#server-only"}
  (Session info: headless chrome=84.0.4147.105)

  104 |     const browser = await webdriver(context.appPort, '/next-config')
  105 | 
> 106 |     const serverText = await browser.elementByCss('#server-only').text()
      |                        ^
  107 |     const serverClientText = await browser
  108 |       .elementByCss('#server-and-client')
  109 |       .text()

  at Object.throwDecodedError (../node_modules/selenium-webdriver/lib/error.js:550:15)
  at parseHttpResponse (../node_modules/selenium-webdriver/lib/http.js:565:13)
  at Executor.execute (../node_modules/selenium-webdriver/lib/http.js:491:26)
  at thenableWebDriverProxy.execute (../node_modules/selenium-webdriver/lib/webdriver.js:700:17)
  at Object.<anonymous> (integration/config/test/index.test.js:106:24)

test/integration/amphtml-ssg/test/index.test.js

  • AMP SSG Support > serverless mode > should load an amp first page correctly
  • AMP SSG Support > serverless mode > should load dynamic hybrid SSG/AMP page with query
  • AMP SSG Support > serverless mode > should load a hybrid amp page with query correctly
Expand output

● AMP SSG Support › serverless mode › should load an amp first page correctly

expect(received).toContain(expected) // indexOf

Expected substring: "yes"
Received string:    "useAmp: no"

  37 |     }
  38 |     const $ = cheerio.load(html)
> 39 |     expect($('#use-amp').text()).toContain('yes')
     |                                  ^
  40 |   })
  41 | 
  42 |   it('should load a hybrid amp page without query correctly', async () => {

  at Object.<anonymous> (integration/amphtml-ssg/test/index.test.js:39:34)

● AMP SSG Support › serverless mode › should load dynamic hybrid SSG/AMP page with query

expect(received).toContain(expected) // indexOf

Expected substring: "yes"
Received string:    "useAmp: no"

  64 |     const html = await renderViaHTTP(appPort, '/blog/post-1?amp=1')
  65 |     const $ = cheerio.load(html)
> 66 |     expect($('#use-amp').text()).toContain('yes')
     |                                  ^
  67 |     expect($('#hello').text()).toContain('hello')
  68 |   })
  69 | 

  at Object.<anonymous> (integration/amphtml-ssg/test/index.test.js:66:34)

● AMP SSG Support › serverless mode › should load a hybrid amp page with query correctly

expect(received).toContain(expected) // indexOf

Expected substring: "yes"
Received string:    "useAmp: no"

  75 |     }
  76 |     const $ = cheerio.load(html)
> 77 |     expect($('#use-amp').text()).toContain('yes')
     |                                  ^
  78 |     expect($('#hello').text()).toContain('hello')
  79 |   })
  80 | 

  at Object.<anonymous> (integration/amphtml-ssg/test/index.test.js:77:34)

test/integration/basic/test/index.test.js

  • Basic Features > Dynamic import > Import mapping > should render dynamic imports bundle
  • Basic Features > Dynamic import > Multiple modules > should only include the rendered module script tag
  • Basic Features > Dynamic import > Multiple modules > should only render one bundle if component is used multiple times
  • Basic Features > Dynamic import > custom chunkfilename > should render the correct filename
  • Basic Features > Dynamic import > default behavior > should render dynamic import components
  • Basic Features > Dynamic import > default behavior > should render dynamic import components using a function as first parameter
  • Basic Features > Dynamic import > ssr:true option > Should render the component on the server side
  • Basic Features > Hot Module Reloading > editing a page > should update styles in a dynamic component correctly
Expand output

● Basic Features › Dynamic import › default behavior › should render dynamic import components

expect(received).toContain(expected) // indexOf

Expected substring: "\"dynamicIds\":[\"./components/hello1.js\"]"
Received string:    "<div id=\"__next\"></div><script src=\"/_next/static/chunks/react-refresh.js?ts=1597888006454\"></script><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/dynamic/ssr\",\"query\":{},\"buildId\":\"development\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}</script><script nomodule src=\"/_next/static/chunks/polyfills.js?ts=1597888006454\"></script><script src=\"/_next/static/chunks/main.js?ts=1597888006454\"></script><script src=\"/_next/static/chunks/webpack.js?ts=1597888006454\"></script><script src=\"/_next/static/chunks/pages/_app.js?ts=1597888006454\"></script><script src=\"/_next/static/chunks/pages/dynamic/ssr.js?ts=1597888006454\"></script><script src=\"/_next/static/development/_buildManifest.js?ts=1597888006454\"></script><script src=\"/_next/static/development/_ssgManifest.js?ts=1597888006454\"></script>"

  14 |         const $ = await get$('/dynamic/ssr')
  15 |         // Make sure the client side knows it has to wait for the bundle
> 16 |         expect($('body').html()).toContain(
     |                                  ^
  17 |           '"dynamicIds":["./components/hello1.js"]'
  18 |         )
  19 |         expect($('body').text()).toMatch(/Hello World 1/)

  at Object.<anonymous> (integration/basic/test/dynamic.js:16:34)

● Basic Features › Dynamic import › default behavior › should render dynamic import components using a function as first parameter

expect(received).toContain(expected) // indexOf

Expected substring: "\"dynamicIds\":[\"./components/hello1.js\"]"
Received string:    "<div id=\"__next\"></div><script src=\"/_next/static/chunks/react-refresh.js?ts=1597888006730\"></script><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/dynamic/function\",\"query\":{},\"buildId\":\"development\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}</script><script nomodule src=\"/_next/static/chunks/polyfills.js?ts=1597888006730\"></script><script src=\"/_next/static/chunks/main.js?ts=1597888006730\"></script><script src=\"/_next/static/chunks/webpack.js?ts=1597888006730\"></script><script src=\"/_next/static/chunks/pages/_app.js?ts=1597888006730\"></script><script src=\"/_next/static/chunks/pages/dynamic/function.js?ts=1597888006730\"></script><script src=\"/_next/static/development/_buildManifest.js?ts=1597888006730\"></script><script src=\"/_next/static/development/_ssgManifest.js?ts=1597888006730\"></script>"

  23 |         const $ = await get$('/dynamic/function')
  24 |         // Make sure the client side knows it has to wait for the bundle
> 25 |         expect($('body').html()).toContain(
     |                                  ^
  26 |           '"dynamicIds":["./components/hello1.js"]'
  27 |         )
  28 |         expect($('body').text()).toMatch(/Hello World 1/)

  at Object.<anonymous> (integration/basic/test/dynamic.js:25:34)

● Basic Features › Dynamic import › ssr:true option › Should render the component on the server side

expect(received).toContain(expected) // indexOf

Expected substring: "\"dynamicIds\""
Received string:    "<div id=\"__next\"></div><script src=\"/_next/static/chunks/react-refresh.js?ts=1597888012132\"></script><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/dynamic/ssr-true\",\"query\":{},\"buildId\":\"development\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}</script><script nomodule src=\"/_next/static/chunks/polyfills.js?ts=1597888012132\"></script><script src=\"/_next/static/chunks/main.js?ts=1597888012132\"></script><script src=\"/_next/static/chunks/webpack.js?ts=1597888012132\"></script><script src=\"/_next/static/chunks/pages/_app.js?ts=1597888012132\"></script><script src=\"/_next/static/chunks/pages/dynamic/ssr-true.js?ts=1597888012132\"></script><script src=\"/_next/static/development/_buildManifest.js?ts=1597888012132\"></script><script src=\"/_next/static/development/_ssgManifest.js?ts=1597888012132\"></script>"

  121 |       it('Should render the component on the server side', async () => {
  122 |         const $ = await get$('/dynamic/ssr-true')
> 123 |         expect($('body').html()).toContain('"dynamicIds"')
      |                                  ^
  124 |         expect($('p').text()).toBe('Hello World 1')
  125 |       })
  126 | 

  at Object.<anonymous> (integration/basic/test/dynamic.js:123:34)

● Basic Features › Dynamic import › custom chunkfilename › should render the correct filename

expect(received).toMatch(expected)

Expected pattern: /test chunkfilename/
Received string:  "{\"props\":{\"pageProps\":{}},\"page\":\"/dynamic/chunkfilename\",\"query\":{},\"buildId\":\"development\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}"

  144 |       it('should render the correct filename', async () => {
  145 |         const $ = await get$('/dynamic/chunkfilename')
> 146 |         expect($('body').text()).toMatch(/test chunkfilename/)
      |                                  ^
  147 |         expect($('html').html()).toMatch(/hello-world\.js/)
  148 |       })
  149 | 

  at Object.<anonymous> (integration/basic/test/dynamic.js:146:34)

● Basic Features › Dynamic import › Multiple modules › should only include the rendered module script tag

expect(received).toMatch(expected)

Expected pattern: /hello1\.js/
Received string:  "<head><style data-next-hide-fouc=\"true\">body{display:none}</style><noscript data-next-hide-fouc=\"true\"><style>body{display:block}</style></noscript><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width\"><meta name=\"next-head-count\" content=\"2\"><link rel=\"preload\" href=\"/_next/static/chunks/main.js?ts=1597888015367\" as=\"script\"><link rel=\"preload\" href=\"/_next/static/chunks/webpack.js?ts=1597888015367\" as=\"script\"><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app.js?ts=1597888015367\" as=\"script\"><link rel=\"preload\" href=\"/_next/static/chunks/pages/dynamic/multiple-modules.js?ts=1597888015367\" as=\"script\"><noscript id=\"__next_css__DO_NOT_USE__\"></noscript></head><body><div id=\"__next\"><div></div></div><script src=\"/_next/static/chunks/react-refresh.js?ts=1597888015367\"></script><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/dynamic/multiple-modules\",\"query\":{},\"buildId\":\"development\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}</script><script nomodule src=\"/_next/static/chunks/polyfills.js?ts=1597888015367\"></script><script src=\"/_next/static/chunks/main.js?ts=1597888015367\"></script><script src=\"/_next/static/chunks/webpack.js?ts=1597888015367\"></script><script src=\"/_next/static/chunks/pages/_app.js?ts=1597888015367\"></script><script src=\"/_next/static/chunks/pages/dynamic/multiple-modules.js?ts=1597888015367\"></script><script src=\"/_next/static/development/_buildManifest.js?ts=1597888015367\"></script><script src=\"/_next/static/development/_ssgManifest.js?ts=1597888015367\"></script></body>"

  193 |         const $ = await get$('/dynamic/multiple-modules')
  194 |         const html = $('html').html()
> 195 |         expect(html).toMatch(/hello1\.js/)
      |                      ^
  196 |         expect(html).not.toMatch(/hello2\.js/)
  197 |       })
  198 | 

  at Object.<anonymous> (integration/basic/test/dynamic.js:195:22)

● Basic Features › Dynamic import › Multiple modules › should only render one bundle if component is used multiple times

TypeError: Cannot read property 'length' of null

  220 |         const html = $('html').html()
  221 |         try {
> 222 |           expect(html.match(/chunks[\\/]hello1\.js/g).length).toBe(2) // one for preload, one for the script tag
      |                  ^
  223 |           expect(html).not.toMatch(/hello2\.js/)
  224 |         } catch (err) {
  225 |           console.error(html)

  at Object.<anonymous> (integration/basic/test/dynamic.js:222:18)

● Basic Features › Dynamic import › Import mapping › should render dynamic imports bundle

expect(received).toBe(expected) // Object.is equality

Expected: true
Received: false

  233 |         const $ = await get$('/dynamic/bundle')
  234 |         const bodyText = $('body').text()
> 235 |         expect(/Dynamic Bundle/.test(bodyText)).toBe(true)
      |                                                 ^
  236 |         expect(/Hello World 1/.test(bodyText)).toBe(true)
  237 |         expect(/Hello World 2/.test(bodyText)).toBe(false)
  238 |       })

  at Object.<anonymous> (integration/basic/test/dynamic.js:235:49)

● Basic Features › Hot Module Reloading › editing a page › should update styles in a dynamic component correctly

expect(received).toBeTruthy()

Received: false

  246 |             '/hmr/style-dynamic-component'
  247 |           )
> 248 |           expect(initialHtml.includes('100px')).toBeTruthy()
      |                                                 ^
  249 | 
  250 |           const $initialHtml = cheerio.load(initialHtml)
  251 |           const initialServerClassName = $initialHtml(

  at Object.<anonymous> (integration/basic/test/hmr.js:248:49)

test/integration/next-dynamic/test/index.test.js

  • next/dynamic > dev mode > should render dynamic server rendered values on client mount
  • next/dynamic > production mode > should render dynamic server rendered values on client mount
Expand output

● next/dynamic › dev mode › should render dynamic server rendered values on client mount

expect(received).toBe(expected) // Object.is equality

Expected: "Index<!-- -->1<!-- -->2<!-- -->3"
Received: "Index<!-- --><!-- --><!-- -->"

  32 | 
  33 |     // Failure case is 'Index<!-- -->3<!-- --><!-- -->'
> 34 |     expect(text).toBe('Index<!-- -->1<!-- -->2<!-- -->3')
     |                  ^
  35 |   })
  36 | }
  37 | 

  at Object.<anonymous> (integration/next-dynamic/test/index.test.js:34:18)

● next/dynamic › production mode › should render dynamic server rendered values on client mount

expect(received).toBe(expected) // Object.is equality

Expected: "Index<!-- -->1<!-- -->2<!-- -->3"
Received: "Index"

  32 | 
  33 |     // Failure case is 'Index<!-- -->3<!-- --><!-- -->'
> 34 |     expect(text).toBe('Index<!-- -->1<!-- -->2<!-- -->3')
     |                  ^
  35 |   })
  36 | }
  37 | 

  at Object.<anonymous> (integration/next-dynamic/test/index.test.js:34:18)

test/integration/dynamic-optional-routing/test/index.test.js

  • Dynamic Optional Routing > raw serverless mode > should render normal (non-dynamic) page
  • Dynamic Optional Routing > raw serverless mode > should render top level optional catch-all root
  • Dynamic Optional Routing > raw serverless mode > should render top level optional catch-all one level
  • Dynamic Optional Routing > raw serverless mode > should render top level optional catch-all two levels
  • Dynamic Optional Routing > raw serverless mode > should render nested optional catch-all root
  • Dynamic Optional Routing > raw serverless mode > should render nested optional catch-all one level
  • Dynamic Optional Routing > raw serverless mode > should render nested optional catch-all two levels
  • Dynamic Optional Routing > raw serverless mode > should render optional catch-all api root
  • Dynamic Optional Routing > raw serverless mode > should render optional catch-all api root one level
  • Dynamic Optional Routing > raw serverless mode > should render optional catch-all api root two levels
  • Dynamic Optional Routing > serverless mode > should render catch-all top-level route with multiple segments
  • Dynamic Optional Routing > serverless mode > should render catch-all top-level route with single segment
  • Dynamic Optional Routing > serverless mode > should render catch-all top-level route with no segments
  • Dynamic Optional Routing > serverless mode > should render catch-all nested route with multiple segments
  • Dynamic Optional Routing > serverless mode > should render catch-all nested route with single segment
  • Dynamic Optional Routing > serverless mode > should render catch-all nested route with no segments
  • Dynamic Optional Routing > serverless mode > should render catch-all nested route with no segments and leading slash
  • Dynamic Optional Routing > serverless mode > should match catch-all api route with multiple segments
  • Dynamic Optional Routing > serverless mode > should match catch-all api route with single segment
  • Dynamic Optional Routing > serverless mode > should match catch-all api route with no segments
  • Dynamic Optional Routing > serverless mode > should match catch-all api route with no segments and leading slash
  • Dynamic Optional Routing > serverless mode > should handle getStaticPaths no segments
  • Dynamic Optional Routing > serverless mode > should handle getStaticPaths no segments and trailing slash
  • Dynamic Optional Routing > serverless mode > should handle getStaticPaths 1 segment
  • Dynamic Optional Routing > serverless mode > should handle getStaticPaths 1 segment and trailing slash
  • Dynamic Optional Routing > serverless mode > should handle getStaticPaths 2 segments
  • Dynamic Optional Routing > serverless mode > should handle getStaticPaths 2 segments and trailing slash
  • Dynamic Optional Routing > serverless mode > should fall back to top-level catch-all
  • Dynamic Optional Routing > serverless mode > should match root path on undefined param
  • Dynamic Optional Routing > serverless mode > should match root path on false param
  • Dynamic Optional Routing > serverless mode > should match root path on null param
  • Dynamic Optional Routing > serverless mode > should handle getStaticPaths with fallback no segments
  • Dynamic Optional Routing > serverless mode > should handle getStaticPaths with fallback 2 segments
  • Dynamic Optional Routing > serverless mode > should fallback correctly when fallback enabled
Expand output

● Dynamic Optional Routing › serverless mode › should render catch-all top-level route with multiple segments

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should render catch-all top-level route with single segment

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should render catch-all top-level route with no segments

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should render catch-all nested route with multiple segments

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should render catch-all nested route with single segment

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should render catch-all nested route with no segments

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should render catch-all nested route with no segments and leading slash

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should match catch-all api route with multiple segments

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should match catch-all api route with single segment

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should match catch-all api route with no segments

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should match catch-all api route with no segments and leading slash

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should handle getStaticPaths no segments

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should handle getStaticPaths no segments and trailing slash

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should handle getStaticPaths 1 segment

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should handle getStaticPaths 1 segment and trailing slash

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should handle getStaticPaths 2 segments

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should handle getStaticPaths 2 segments and trailing slash

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should fall back to top-level catch-all

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should match root path on undefined param

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should match root path on false param

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should match root path on null param

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should handle getStaticPaths with fallback no segments

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should handle getStaticPaths with fallback 2 segments

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › serverless mode › should fallback correctly when fallback enabled

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › raw serverless mode › should render normal (non-dynamic) page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › raw serverless mode › should render top level optional catch-all root

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › raw serverless mode › should render top level optional catch-all one level

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › raw serverless mode › should render top level optional catch-all two levels

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › raw serverless mode › should render nested optional catch-all root

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › raw serverless mode › should render nested optional catch-all one level

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › raw serverless mode › should render nested optional catch-all two levels

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › raw serverless mode › should render optional catch-all api root

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › raw serverless mode › should render optional catch-all api root one level

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Dynamic Optional Routing › raw serverless mode › should render optional catch-all api root two levels

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

test/integration/font-optimization/test/index.test.js

  • Font optimization for SSR apps > should inline the google fonts for static pages with Next/Head
  • Font optimization for SSR apps > should inline the google fonts for SSR pages
Expand output

● Font optimization for SSR apps › should inline the google fonts for static pages with Next/Head

expect(received).toContain(expected) // indexOf

Expected substring: "<link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css2?family=Modak\"/>"
Received string:    "<!DOCTYPE html><html><head><link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css?family=Voces\"/><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><link rel=\"preload\" href=\"/_next/static/chunks/main-e46a445514247f04698a.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/static-head-3b877f37a9df2b2b4d9b.js\" as=\"script\"/><style data-href=\"https://fonts.googleapis.com/css?family=Voces\">@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDmk.woff) format(\"woff\")}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PIDm_6pClI_ik.woff2) format(\"woff2\");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDm_6pClI.woff2) format(\"woff2\");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}</style></head><body><div id=\"__next\"><div>Hi!</div></div><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/static-head\",\"query\":{},\"buildId\":\"fe_zvSNqW71xPnNmc7JXv\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}</script><script nomodule=\"\" src=\"/_next/static/chunks/polyfills-e60bf636a1339bc95b80.js\"></script><script src=\"/_next/static/chunks/main-e46a445514247f04698a.js\" async=\"\"></script><script src=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" async=\"\"></script><script src=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" async=\"\"></script><script src=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" async=\"\"></script><script src=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/static-head-3b877f37a9df2b2b4d9b.js\" async=\"\"></script><script src=\"/_next/static/fe_zvSNqW71xPnNmc7JXv/_buildManifest.js\" async=\"\"></script><script src=\"/_next/static/fe_zvSNqW71xPnNmc7JXv/_ssgManifest.js\" async=\"\"></script></body></html>"

  56 |     const html = await renderViaHTTP(appPort, '/static-head')
  57 |     expect(await fsExists(builtPage('font-manifest.json'))).toBe(true)
> 58 |     expect(html).toContain(
     |                  ^
  59 |       '<link rel="stylesheet" data-href="https://fonts.googleapis.com/css2?family=Modak"/>'
  60 |     )
  61 |     expect(html).toMatch(

  at Object.<anonymous> (integration/font-optimization/test/index.test.js:58:18)

● Font optimization for SSR apps › should inline the google fonts for SSR pages

expect(received).toContain(expected) // indexOf

Expected substring: "<link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css2?family=Roboto:wght@700\"/>"
Received string:    "<!DOCTYPE html><html><head><link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css?family=Voces\"/><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><link rel=\"preload\" href=\"/_next/static/chunks/main-e46a445514247f04698a.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/stars-7861c4f09f546bf9779a.js\" as=\"script\"/><style data-href=\"https://fonts.googleapis.com/css?family=Voces\">@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDmk.woff) format(\"woff\")}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PIDm_6pClI_ik.woff2) format(\"woff2\");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDm_6pClI.woff2) format(\"woff2\");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}</style></head><body><div id=\"__next\"><div class=\"container\"><main><div>Next stars: <!-- -->648.2878137462905</div></main></div></div><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{\"stars\":648.2878137462905}},\"page\":\"/stars\",\"query\":{},\"buildId\":\"fe_zvSNqW71xPnNmc7JXv\",\"isFallback\":false,\"gip\":true}</script><script nomodule=\"\" src=\"/_next/static/chunks/polyfills-e60bf636a1339bc95b80.js\"></script><script src=\"/_next/static/chunks/main-e46a445514247f04698a.js\" async=\"\"></script><script src=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" async=\"\"></script><script src=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" async=\"\"></script><script src=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" async=\"\"></script><script src=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/stars-7861c4f09f546bf9779a.js\" async=\"\"></script><script src=\"/_next/static/fe_zvSNqW71xPnNmc7JXv/_buildManifest.js\" async=\"\"></script><script src=\"/_next/static/fe_zvSNqW71xPnNmc7JXv/_ssgManifest.js\" async=\"\"></script></body></html>"

  67 |     const html = await renderViaHTTP(appPort, '/stars')
  68 |     expect(await fsExists(builtPage('font-manifest.json'))).toBe(true)
> 69 |     expect(html).toContain(
     |                  ^
  70 |       '<link rel="stylesheet" data-href="https://fonts.googleapis.com/css2?family=Roboto:wght@700"/>'
  71 |     )
  72 |     expect(html).toMatch(

  at Object.<anonymous> (integration/font-optimization/test/index.test.js:69:18)

@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 12.7s 13s ⚠️ +330ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.29 kB
Page Load Tests Overall increase ✓
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.326 2.306 -0.02
/ avg req/sec 1074.6 1084.05 +9.45
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.296 1.257 -0.04
/error-in-render avg req/sec 1928.44 1989.62 +61.18
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-512d5b9..081a.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-1203ff1..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 949 B 949 B
link.html gzip 955 B 955 B
withRouter.html gzip 940 B 940 B
Overall change 2.84 kB 2.84 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 14.3s 14.4s ⚠️ +73ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.29 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-512d5b9..081a.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-1203ff1..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.03 MB 1.03 MB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB
link.js 1.07 MB 1.07 MB
routerDirect.js 1.07 MB 1.07 MB
withRouter.js 1.07 MB 1.07 MB
Overall change 5.27 MB 5.27 MB
Commit: 4fb1e6d

@elliottsj
Copy link
Contributor Author

elliottsj commented Aug 20, 2020

Woo it works!

image

Ended up needing to upgrade to resolve@1.17.0 because version 1.11.0 was not following symlinks properly.

I wasn't able to test this the usual way due to the way that pnpm/npm links packages that are installed locally from elsewhere on the file system. i.e. still ended up with baseRes !== res as described in #15616 (comment):

context /Users/spencerelliott/Dev/elliottsj/next.js/packages/next/dist/pages
res     /Users/spencerelliott/Dev/elliottsj/next.js/node_modules/react/index.js
baseRes /Users/spencerelliott/Dev/elliottsj/my-app/node_modules/.pnpm/react@16.13.1/node_modules/react/index.js
baseRes !== res. bundling module.

But I was able to test locally by spinning up a verdaccio server locally and publishing Next.js packages there, then installing to my example app. Roughly:

  1. Start verdaccio.

  2. Commit/merge my changes into my local canary branch.

  3. In lerna.json, set "registry": "http://localhost:4873/".

  4. yarn run lerna version prerelease --preid canary --force-publish.

  5. yarn run lerna publish from-git --npm-tag canary --yes.

  6. cd ../my-app

  7. In package.json, set "next": "9.5.3-canary.16" (use the version published in the previous step).

  8. pnpm install

(There's probably a simpler way to do the above, but writing down these steps mostly for my future reference).


Going to look into the CI failures now...

@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Failing test suites

Commit: b9e5700

test/integration/development-runtime-config/test/index.test.js

  • should work with runtime-config in next.config.js > empty runtime-config
  • should work with runtime-config in next.config.js > with runtime-config
Expand output

● should work with runtime-config in next.config.js › empty runtime-config

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  37 |     /Cannot read property 'serverRuntimeConfig' of undefined/i
  38 |   )
> 39 |   expect(JSON.parse($('#server-runtime-config').text())).toEqual(
     |               ^
  40 |     config.serverRuntimeConfig || {}
  41 |   )
  42 |   expect(JSON.parse($('#public-runtime-config').text())).toEqual(

  at runApp (integration/development-runtime-config/test/index.test.js:39:15)
  at Object.<anonymous> (integration/development-runtime-config/test/index.test.js:57:5)

● should work with runtime-config in next.config.js › with runtime-config

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  37 |     /Cannot read property 'serverRuntimeConfig' of undefined/i
  38 |   )
> 39 |   expect(JSON.parse($('#server-runtime-config').text())).toEqual(
     |               ^
  40 |     config.serverRuntimeConfig || {}
  41 |   )
  42 |   expect(JSON.parse($('#public-runtime-config').text())).toEqual(

  at runApp (integration/development-runtime-config/test/index.test.js:39:15)
  at Object.<anonymous> (integration/development-runtime-config/test/index.test.js:77:5)

test/integration/amphtml-ssg/test/index.test.js

  • AMP SSG Support > serverless mode > should load an amp first page correctly
  • AMP SSG Support > serverless mode > should load dynamic hybrid SSG/AMP page with query
  • AMP SSG Support > serverless mode > should load a hybrid amp page with query correctly
Expand output

● AMP SSG Support › serverless mode › should load an amp first page correctly

expect(received).toContain(expected) // indexOf

Expected substring: "yes"
Received string:    "useAmp: no"

  37 |     }
  38 |     const $ = cheerio.load(html)
> 39 |     expect($('#use-amp').text()).toContain('yes')
     |                                  ^
  40 |   })
  41 | 
  42 |   it('should load a hybrid amp page without query correctly', async () => {

  at Object.<anonymous> (integration/amphtml-ssg/test/index.test.js:39:34)

● AMP SSG Support › serverless mode › should load dynamic hybrid SSG/AMP page with query

expect(received).toContain(expected) // indexOf

Expected substring: "yes"
Received string:    "useAmp: no"

  64 |     const html = await renderViaHTTP(appPort, '/blog/post-1?amp=1')
  65 |     const $ = cheerio.load(html)
> 66 |     expect($('#use-amp').text()).toContain('yes')
     |                                  ^
  67 |     expect($('#hello').text()).toContain('hello')
  68 |   })
  69 | 

  at Object.<anonymous> (integration/amphtml-ssg/test/index.test.js:66:34)

● AMP SSG Support › serverless mode › should load a hybrid amp page with query correctly

expect(received).toContain(expected) // indexOf

Expected substring: "yes"
Received string:    "useAmp: no"

  75 |     }
  76 |     const $ = cheerio.load(html)
> 77 |     expect($('#use-amp').text()).toContain('yes')
     |                                  ^
  78 |     expect($('#hello').text()).toContain('hello')
  79 |   })
  80 | 

  at Object.<anonymous> (integration/amphtml-ssg/test/index.test.js:77:34)

test/integration/config/test/index.test.js

  • Configuration > renders server config on the server only
  • Configuration > renders public config on the server only
  • Configuration > should have config available on the client
Expand output

● Configuration › renders server config on the server only

expect(received).toBe(expected) // Object.is equality

Expected: "secret"
Received: ""

  83 |   test('renders server config on the server only', async () => {
  84 |     const $ = await get$('/next-config')
> 85 |     expect($('#server-only').text()).toBe('secret')
     |                                      ^
  86 |   })
  87 | 
  88 |   test('renders public config on the server only', async () => {

  at Object.<anonymous> (integration/config/test/index.test.js:85:38)

● Configuration › renders public config on the server only

expect(received).toBe(expected) // Object.is equality

Expected: "/static"
Received: ""

  88 |   test('renders public config on the server only', async () => {
  89 |     const $ = await get$('/next-config')
> 90 |     expect($('#server-and-client').text()).toBe('/static')
     |                                            ^
  91 |   })
  92 | 
  93 |   test('renders the build id in development mode', async () => {

  at Object.<anonymous> (integration/config/test/index.test.js:90:44)

● Configuration › should have config available on the client

NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"#server-only"}
  (Session info: headless chrome=84.0.4147.105)

  104 |     const browser = await webdriver(context.appPort, '/next-config')
  105 | 
> 106 |     const serverText = await browser.elementByCss('#server-only').text()
      |                        ^
  107 |     const serverClientText = await browser
  108 |       .elementByCss('#server-and-client')
  109 |       .text()

  at Object.throwDecodedError (../node_modules/selenium-webdriver/lib/error.js:550:15)
  at parseHttpResponse (../node_modules/selenium-webdriver/lib/http.js:565:13)
  at Executor.execute (../node_modules/selenium-webdriver/lib/http.js:491:26)
  at thenableWebDriverProxy.execute (../node_modules/selenium-webdriver/lib/webdriver.js:700:17)
  at Object.<anonymous> (integration/config/test/index.test.js:106:24)

test/integration/prerender-fallback-aspath/test/index.test.js

  • Fallback asPath normalizing > should have normalized asPath for fallback page
  • Fallback asPath normalizing > should have normalized asPath for fallback page with entry directory
  • Fallback asPath normalizing > should have normalized asPath for fallback page multi-params
  • Fallback asPath normalizing > should have normalized asPath for fallback page with entry directory multi-params
Expand output

● Fallback asPath normalizing › should have normalized asPath for fallback page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Fallback asPath normalizing › should have normalized asPath for fallback page with entry directory

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Fallback asPath normalizing › should have normalized asPath for fallback page multi-params

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Fallback asPath normalizing › should have normalized asPath for fallback page with entry directory multi-params

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/prerender-fallback-aspath/test/index.test.js:33:18

test/integration/export/test/index.test.js

  • Static Export > should delete existing exported files
  • Static Export > should honor exportTrailingSlash for 404 page
  • Static Export > should handle trailing slash in getStaticPaths
  • Static Export > should only output 404.html without exportTrailingSlash
  • Static Export > should not duplicate /index with exportTrailingSlash
  • Static Export > API routes export > Should throw if a route is matched
  • Static Export > Dynamic routes export > Should throw error not matched route
  • Static Export > ExportPathMap's query in development mode > should be present in ctx.query
  • Static Export > ExportPathMap's query in development mode > should replace url query params in ctx.query when conflicting
  • Static Export > ExportPathMap's query in development mode > should be merged with url query params in ctx.query
  • Static Export > Render in development mode > should render the home page
  • Static Export > Render in development mode > should render pages only existent in exportPathMap page
  • Static Export > Render via SSR > should render the home page
  • Static Export > Render via SSR > should render the about page
  • Static Export > Render via SSR > should render links correctly
  • Static Export > Render via SSR > should render a page with getInitialProps
  • Static Export > Render via SSR > should render a dynamically rendered custom url page
  • Static Export > Render via SSR > should render pages with dynamic imports
  • Static Export > Render via SSR > should render paths with extensions
  • Static Export > Render via SSR > should give empty object for query if there is no query
  • Static Export > Render via SSR > should render _error on 404.html even if not provided in exportPathMap
  • Static Export > Render via SSR > should render _error on /404/index.html
  • Static Export > Render via SSR > Should serve static files
  • Static Export > Render via SSR > Should serve public files
  • Static Export > Render via SSR > Should render dynamic files with query
  • Static Export > Render via browser > should render the home page
  • Static Export > Render via browser > should add trailing slash on Link
  • Static Export > Render via browser > should not add any slash on hash Link
  • Static Export > Render via browser > should preserve hash symbol on empty hash Link
  • Static Export > Render via browser > should preserve question mark on empty query Link
  • Static Export > Render via browser > should not add trailing slash on Link when disabled
  • Static Export > Render via browser > should do navigations via Link
  • Static Export > Render via browser > should do navigations via Router
  • Static Export > Render via browser > should do run client side javascript
  • Static Export > Render via browser > should render pages using getInitialProps
  • Static Export > Render via browser > should render dynamic pages with custom urls
  • Static Export > Render via browser > should support client side naviagtion
  • Static Export > Render via browser > should render dynamic import components in the client
  • Static Export > Render via browser > should render pages with url hash correctly
  • Static Export > Render via browser > should navigate even if used a button inside
  • Static Export > Render via browser > should update query after mount
  • Static Export > Render via browser > pages in the nested level: level1 > should render the home page
  • Static Export > Render via browser > pages in the nested level: level1 > should render the about page
Expand output

● Static Export › should delete existing exported files

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › should honor exportTrailingSlash for 404 page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › should handle trailing slash in getStaticPaths

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › should only output 404.html without exportTrailingSlash

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › should not duplicate /index with exportTrailingSlash

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render the home page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render the about page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render links correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render a page with getInitialProps

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render a dynamically rendered custom url page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render pages with dynamic imports

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render paths with extensions

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should give empty object for query if there is no query

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render _error on 404.html even if not provided in exportPathMap

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render _error on /404/index.html

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › Should serve static files

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › Should serve public files

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › Should render dynamic files with query

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should render the home page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should add trailing slash on Link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should not add any slash on hash Link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should preserve hash symbol on empty hash Link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should preserve question mark on empty query Link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should not add trailing slash on Link when disabled

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should do navigations via Link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should do navigations via Router

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should do run client side javascript

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should render pages using getInitialProps

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should render dynamic pages with custom urls

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should support client side naviagtion

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should render dynamic import components in the client

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should render pages with url hash correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should navigate even if used a button inside

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should update query after mount

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › pages in the nested level: level1 › should render the home page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › pages in the nested level: level1 › should render the about page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render in development mode › should render the home page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render in development mode › should render pages only existent in exportPathMap page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › ExportPathMap's query in development mode › should be present in ctx.query

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › ExportPathMap's query in development mode › should replace url query params in ctx.query when conflicting

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › ExportPathMap's query in development mode › should be merged with url query params in ctx.query

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Dynamic routes export › Should throw error not matched route

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › API routes export › Should throw if a route is matched

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Test suite failed to run

TypeError: Cannot read property '__app' of undefined

  309 | 
  310 | export async function stopApp(server) {
> 311 |   if (server.__app) {
      |              ^
  312 |     await server.__app.close()
  313 |   }
  314 |   await promiseCall(server, 'close')

  at stopApp (lib/next-test-utils.js:311:14)
  at integration/export/test/index.test.js:85:7

test/integration/basepath/test/index.test.js

  • basePath serverless > should add basePath to routes-manifest
  • basePath serverless > should prefetch pages correctly when manually called
  • basePath serverless > should prefetch pages correctly in viewport with
  • basePath serverless > should 404 for public file without basePath
  • basePath serverless > should serve public file with basePath correctly
  • basePath serverless > should rewrite with basePath by default
  • basePath serverless > should not rewrite without basePath without disabling
  • basePath serverless > should not rewrite with basePath when set to false
  • basePath serverless > should rewrite without basePath when set to false
  • basePath serverless > should redirect with basePath by default
  • basePath serverless > should not redirect without basePath without disabling
  • basePath serverless > should not redirect with basePath when set to false
  • basePath serverless > should redirect without basePath when set to false
  • basePath serverless > should add header with basePath by default
  • basePath serverless > should not add header without basePath without disabling
  • basePath serverless > should not add header with basePath when set to false
  • basePath serverless > should add header without basePath when set to false
  • basePath serverless > should not update URL for a 404
  • basePath serverless > should handle 404 urls that start with basePath
  • basePath serverless > should navigate back to a non-basepath 404 that starts with basepath
  • basePath serverless > should update dynamic params after mount correctly
  • basePath serverless > should navigate to index page with getStaticProps
  • basePath serverless > should navigate to nested index page with getStaticProps
  • basePath serverless > should work with nested folder with same name as basePath
  • basePath serverless > should work with normal dynamic page
  • basePath serverless > should work with hash links
  • basePath serverless > should work with catch-all page
  • basePath serverless > should redirect trailing slash correctly
  • basePath serverless > should redirect trailing slash on root correctly
  • basePath serverless > should navigate an absolute url
  • basePath serverless > should navigate an absolute local url with basePath
  • basePath serverless > should navigate an absolute local url without basePath
  • basePath serverless > should 404 when manually adding basePath with
  • basePath serverless > should 404 when manually adding basePath with router.push
  • basePath serverless > should 404 when manually adding basePath with router.replace
  • basePath serverless > should show the hello page under the /docs prefix
  • basePath serverless > should have correct router paths on first load of /
  • basePath serverless > should have correct router paths on first load of /hello
  • basePath serverless > should fetch data for getStaticProps without reloading
  • basePath serverless > should fetch data for getServerSideProps without reloading
  • basePath serverless > should have correct href for a link
  • basePath serverless > should have correct href for a link to /
  • basePath serverless > should show 404 for page not under the /docs prefix
  • basePath serverless > should show the other-page page under the /docs prefix
  • basePath serverless > should have basePath field on Router
  • basePath serverless > should navigate to the page without refresh
  • basePath serverless > should use urls with basepath in router events
  • basePath serverless > should use urls with basepath in router events for hash changes
  • basePath serverless > should use urls with basepath in router events for cancelled routes
  • basePath serverless > should use urls with basepath in router events for failed route change
  • basePath serverless > should allow URL query strings without refresh
  • basePath serverless > should correctly replace state when same asPath but different url
  • basePath serverless > should always strip basePath in serverless-loader
Expand output

● basePath serverless › should add basePath to routes-manifest

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should prefetch pages correctly when manually called

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should prefetch pages correctly in viewport with

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should 404 for public file without basePath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should serve public file with basePath correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should rewrite with basePath by default

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not rewrite without basePath without disabling

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not rewrite with basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should rewrite without basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should redirect with basePath by default

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not redirect without basePath without disabling

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not redirect with basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should redirect without basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should add header with basePath by default

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not add header without basePath without disabling

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not add header with basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should add header without basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not update URL for a 404

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should handle 404 urls that start with basePath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate back to a non-basepath 404 that starts with basepath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should update dynamic params after mount correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate to index page with getStaticProps

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate to nested index page with getStaticProps

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should work with nested folder with same name as basePath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should work with normal dynamic page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should work with hash links

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should work with catch-all page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should redirect trailing slash correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should redirect trailing slash on root correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate an absolute url

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate an absolute local url with basePath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate an absolute local url without basePath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should 404 when manually adding basePath with

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should 404 when manually adding basePath with router.push

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should 404 when manually adding basePath with router.replace

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should show the hello page under the /docs prefix

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should have correct router paths on first load of /

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should have correct router paths on first load of /hello

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should fetch data for getStaticProps without reloading

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should fetch data for getServerSideProps without reloading

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should have correct href for a link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should have correct href for a link to /

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should show 404 for page not under the /docs prefix

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should show the other-page page under the /docs prefix

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should have basePath field on Router

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate to the page without refresh

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should use urls with basepath in router events

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should use urls with basepath in router events for hash changes

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should use urls with basepath in router events for cancelled routes

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should use urls with basepath in router events for failed route change

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should allow URL query strings without refresh

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should correctly replace state when same asPath but different url

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should always strip basePath in serverless-loader

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/basepath/test/index.test.js:1097:11

@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 12.3s 12.3s ⚠️ +60ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.38 kB
Page Load Tests Overall increase ✓
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.243 2.226 -0.02
/ avg req/sec 1114.62 1123.16 +8.54
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.247 1.235 -0.01
/error-in-render avg req/sec 2004.76 2023.62 +18.86
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-512d5b9..081a.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-1203ff1..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 949 B 949 B
link.html gzip 955 B 955 B
withRouter.html gzip 940 B 940 B
Overall change 2.84 kB 2.84 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 13.8s 13.9s ⚠️ +88ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.38 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-512d5b9..081a.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-1203ff1..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.03 MB 1.03 MB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB
link.js 1.07 MB 1.07 MB
routerDirect.js 1.07 MB 1.07 MB
withRouter.js 1.07 MB 1.07 MB
Overall change 5.27 MB 5.27 MB
Commit: b9e5700

@elliottsj elliottsj force-pushed the resolve-dont-preserve-symlinks branch from b9e5700 to 05cad30 Compare August 20, 2020 03:52
@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Failing test suites

Commit: 05cad30

test/integration/amphtml-ssg/test/index.test.js

  • AMP SSG Support > serverless mode > should load an amp first page correctly
  • AMP SSG Support > serverless mode > should load dynamic hybrid SSG/AMP page with query
  • AMP SSG Support > serverless mode > should load a hybrid amp page with query correctly
Expand output

● AMP SSG Support › serverless mode › should load an amp first page correctly

expect(received).toContain(expected) // indexOf

Expected substring: "yes"
Received string:    "useAmp: no"

  37 |     }
  38 |     const $ = cheerio.load(html)
> 39 |     expect($('#use-amp').text()).toContain('yes')
     |                                  ^
  40 |   })
  41 | 
  42 |   it('should load a hybrid amp page without query correctly', async () => {

  at Object.<anonymous> (integration/amphtml-ssg/test/index.test.js:39:34)

● AMP SSG Support › serverless mode › should load dynamic hybrid SSG/AMP page with query

expect(received).toContain(expected) // indexOf

Expected substring: "yes"
Received string:    "useAmp: no"

  64 |     const html = await renderViaHTTP(appPort, '/blog/post-1?amp=1')
  65 |     const $ = cheerio.load(html)
> 66 |     expect($('#use-amp').text()).toContain('yes')
     |                                  ^
  67 |     expect($('#hello').text()).toContain('hello')
  68 |   })
  69 | 

  at Object.<anonymous> (integration/amphtml-ssg/test/index.test.js:66:34)

● AMP SSG Support › serverless mode › should load a hybrid amp page with query correctly

expect(received).toContain(expected) // indexOf

Expected substring: "yes"
Received string:    "useAmp: no"

  75 |     }
  76 |     const $ = cheerio.load(html)
> 77 |     expect($('#use-amp').text()).toContain('yes')
     |                                  ^
  78 |     expect($('#hello').text()).toContain('hello')
  79 |   })
  80 | 

  at Object.<anonymous> (integration/amphtml-ssg/test/index.test.js:77:34)

test/integration/config/test/index.test.js

  • Configuration > renders server config on the server only
  • Configuration > renders public config on the server only
  • Configuration > should have config available on the client
Expand output

● Configuration › renders server config on the server only

expect(received).toBe(expected) // Object.is equality

Expected: "secret"
Received: ""

  83 |   test('renders server config on the server only', async () => {
  84 |     const $ = await get$('/next-config')
> 85 |     expect($('#server-only').text()).toBe('secret')
     |                                      ^
  86 |   })
  87 | 
  88 |   test('renders public config on the server only', async () => {

  at Object.<anonymous> (integration/config/test/index.test.js:85:38)

● Configuration › renders public config on the server only

expect(received).toBe(expected) // Object.is equality

Expected: "/static"
Received: ""

  88 |   test('renders public config on the server only', async () => {
  89 |     const $ = await get$('/next-config')
> 90 |     expect($('#server-and-client').text()).toBe('/static')
     |                                            ^
  91 |   })
  92 | 
  93 |   test('renders the build id in development mode', async () => {

  at Object.<anonymous> (integration/config/test/index.test.js:90:44)

● Configuration › should have config available on the client

NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"#server-only"}
  (Session info: headless chrome=84.0.4147.105)

  104 |     const browser = await webdriver(context.appPort, '/next-config')
  105 | 
> 106 |     const serverText = await browser.elementByCss('#server-only').text()
      |                        ^
  107 |     const serverClientText = await browser
  108 |       .elementByCss('#server-and-client')
  109 |       .text()

  at Object.throwDecodedError (../node_modules/selenium-webdriver/lib/error.js:550:15)
  at parseHttpResponse (../node_modules/selenium-webdriver/lib/http.js:565:13)
  at Executor.execute (../node_modules/selenium-webdriver/lib/http.js:491:26)
  at thenableWebDriverProxy.execute (../node_modules/selenium-webdriver/lib/webdriver.js:700:17)
  at Object.<anonymous> (integration/config/test/index.test.js:106:24)

test/integration/development-runtime-config/test/index.test.js

  • should work with runtime-config in next.config.js > empty runtime-config
  • should work with runtime-config in next.config.js > with runtime-config
Expand output

● should work with runtime-config in next.config.js › empty runtime-config

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  37 |     /Cannot read property 'serverRuntimeConfig' of undefined/i
  38 |   )
> 39 |   expect(JSON.parse($('#server-runtime-config').text())).toEqual(
     |               ^
  40 |     config.serverRuntimeConfig || {}
  41 |   )
  42 |   expect(JSON.parse($('#public-runtime-config').text())).toEqual(

  at runApp (integration/development-runtime-config/test/index.test.js:39:15)
  at Object.<anonymous> (integration/development-runtime-config/test/index.test.js:57:5)

● should work with runtime-config in next.config.js › with runtime-config

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  37 |     /Cannot read property 'serverRuntimeConfig' of undefined/i
  38 |   )
> 39 |   expect(JSON.parse($('#server-runtime-config').text())).toEqual(
     |               ^
  40 |     config.serverRuntimeConfig || {}
  41 |   )
  42 |   expect(JSON.parse($('#public-runtime-config').text())).toEqual(

  at runApp (integration/development-runtime-config/test/index.test.js:39:15)
  at Object.<anonymous> (integration/development-runtime-config/test/index.test.js:77:5)

test/integration/prerender-fallback-aspath/test/index.test.js

  • Fallback asPath normalizing > should have normalized asPath for fallback page
  • Fallback asPath normalizing > should have normalized asPath for fallback page with entry directory
  • Fallback asPath normalizing > should have normalized asPath for fallback page multi-params
  • Fallback asPath normalizing > should have normalized asPath for fallback page with entry directory multi-params
Expand output

● Fallback asPath normalizing › should have normalized asPath for fallback page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Fallback asPath normalizing › should have normalized asPath for fallback page with entry directory

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Fallback asPath normalizing › should have normalized asPath for fallback page multi-params

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Fallback asPath normalizing › should have normalized asPath for fallback page with entry directory multi-params

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/prerender-fallback-aspath/test/index.test.js:33:18

test/integration/export/test/index.test.js

  • Static Export > should delete existing exported files
  • Static Export > should honor exportTrailingSlash for 404 page
  • Static Export > should handle trailing slash in getStaticPaths
  • Static Export > should only output 404.html without exportTrailingSlash
  • Static Export > should not duplicate /index with exportTrailingSlash
  • Static Export > API routes export > Should throw if a route is matched
  • Static Export > Dynamic routes export > Should throw error not matched route
  • Static Export > ExportPathMap's query in development mode > should be present in ctx.query
  • Static Export > ExportPathMap's query in development mode > should replace url query params in ctx.query when conflicting
  • Static Export > ExportPathMap's query in development mode > should be merged with url query params in ctx.query
  • Static Export > Render in development mode > should render the home page
  • Static Export > Render in development mode > should render pages only existent in exportPathMap page
  • Static Export > Render via SSR > should render the home page
  • Static Export > Render via SSR > should render the about page
  • Static Export > Render via SSR > should render links correctly
  • Static Export > Render via SSR > should render a page with getInitialProps
  • Static Export > Render via SSR > should render a dynamically rendered custom url page
  • Static Export > Render via SSR > should render pages with dynamic imports
  • Static Export > Render via SSR > should render paths with extensions
  • Static Export > Render via SSR > should give empty object for query if there is no query
  • Static Export > Render via SSR > should render _error on 404.html even if not provided in exportPathMap
  • Static Export > Render via SSR > should render _error on /404/index.html
  • Static Export > Render via SSR > Should serve static files
  • Static Export > Render via SSR > Should serve public files
  • Static Export > Render via SSR > Should render dynamic files with query
  • Static Export > Render via browser > should render the home page
  • Static Export > Render via browser > should add trailing slash on Link
  • Static Export > Render via browser > should not add any slash on hash Link
  • Static Export > Render via browser > should preserve hash symbol on empty hash Link
  • Static Export > Render via browser > should preserve question mark on empty query Link
  • Static Export > Render via browser > should not add trailing slash on Link when disabled
  • Static Export > Render via browser > should do navigations via Link
  • Static Export > Render via browser > should do navigations via Router
  • Static Export > Render via browser > should do run client side javascript
  • Static Export > Render via browser > should render pages using getInitialProps
  • Static Export > Render via browser > should render dynamic pages with custom urls
  • Static Export > Render via browser > should support client side naviagtion
  • Static Export > Render via browser > should render dynamic import components in the client
  • Static Export > Render via browser > should render pages with url hash correctly
  • Static Export > Render via browser > should navigate even if used a button inside
  • Static Export > Render via browser > should update query after mount
  • Static Export > Render via browser > pages in the nested level: level1 > should render the home page
  • Static Export > Render via browser > pages in the nested level: level1 > should render the about page
Expand output

● Static Export › should delete existing exported files

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › should honor exportTrailingSlash for 404 page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › should handle trailing slash in getStaticPaths

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › should only output 404.html without exportTrailingSlash

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › should not duplicate /index with exportTrailingSlash

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render the home page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render the about page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render links correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render a page with getInitialProps

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render a dynamically rendered custom url page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render pages with dynamic imports

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render paths with extensions

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should give empty object for query if there is no query

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render _error on 404.html even if not provided in exportPathMap

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › should render _error on /404/index.html

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › Should serve static files

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › Should serve public files

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via SSR › Should render dynamic files with query

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should render the home page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should add trailing slash on Link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should not add any slash on hash Link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should preserve hash symbol on empty hash Link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should preserve question mark on empty query Link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should not add trailing slash on Link when disabled

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should do navigations via Link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should do navigations via Router

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should do run client side javascript

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should render pages using getInitialProps

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should render dynamic pages with custom urls

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should support client side naviagtion

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should render dynamic import components in the client

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should render pages with url hash correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should navigate even if used a button inside

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › should update query after mount

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › pages in the nested level: level1 › should render the home page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render via browser › pages in the nested level: level1 › should render the about page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render in development mode › should render the home page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Render in development mode › should render pages only existent in exportPathMap page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › ExportPathMap's query in development mode › should be present in ctx.query

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › ExportPathMap's query in development mode › should replace url query params in ctx.query when conflicting

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › ExportPathMap's query in development mode › should be merged with url query params in ctx.query

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › Dynamic routes export › Should throw error not matched route

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Static Export › API routes export › Should throw if a route is matched

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Test suite failed to run

TypeError: Cannot read property '__app' of undefined

  309 | 
  310 | export async function stopApp(server) {
> 311 |   if (server.__app) {
      |              ^
  312 |     await server.__app.close()
  313 |   }
  314 |   await promiseCall(server, 'close')

  at stopApp (lib/next-test-utils.js:311:14)
  at integration/export/test/index.test.js:85:7

test/integration/basepath/test/index.test.js

  • basePath serverless > should add basePath to routes-manifest
  • basePath serverless > should prefetch pages correctly when manually called
  • basePath serverless > should prefetch pages correctly in viewport with
  • basePath serverless > should 404 for public file without basePath
  • basePath serverless > should serve public file with basePath correctly
  • basePath serverless > should rewrite with basePath by default
  • basePath serverless > should not rewrite without basePath without disabling
  • basePath serverless > should not rewrite with basePath when set to false
  • basePath serverless > should rewrite without basePath when set to false
  • basePath serverless > should redirect with basePath by default
  • basePath serverless > should not redirect without basePath without disabling
  • basePath serverless > should not redirect with basePath when set to false
  • basePath serverless > should redirect without basePath when set to false
  • basePath serverless > should add header with basePath by default
  • basePath serverless > should not add header without basePath without disabling
  • basePath serverless > should not add header with basePath when set to false
  • basePath serverless > should add header without basePath when set to false
  • basePath serverless > should not update URL for a 404
  • basePath serverless > should handle 404 urls that start with basePath
  • basePath serverless > should navigate back to a non-basepath 404 that starts with basepath
  • basePath serverless > should update dynamic params after mount correctly
  • basePath serverless > should navigate to index page with getStaticProps
  • basePath serverless > should navigate to nested index page with getStaticProps
  • basePath serverless > should work with nested folder with same name as basePath
  • basePath serverless > should work with normal dynamic page
  • basePath serverless > should work with hash links
  • basePath serverless > should work with catch-all page
  • basePath serverless > should redirect trailing slash correctly
  • basePath serverless > should redirect trailing slash on root correctly
  • basePath serverless > should navigate an absolute url
  • basePath serverless > should navigate an absolute local url with basePath
  • basePath serverless > should navigate an absolute local url without basePath
  • basePath serverless > should 404 when manually adding basePath with
  • basePath serverless > should 404 when manually adding basePath with router.push
  • basePath serverless > should 404 when manually adding basePath with router.replace
  • basePath serverless > should show the hello page under the /docs prefix
  • basePath serverless > should have correct router paths on first load of /
  • basePath serverless > should have correct router paths on first load of /hello
  • basePath serverless > should fetch data for getStaticProps without reloading
  • basePath serverless > should fetch data for getServerSideProps without reloading
  • basePath serverless > should have correct href for a link
  • basePath serverless > should have correct href for a link to /
  • basePath serverless > should show 404 for page not under the /docs prefix
  • basePath serverless > should show the other-page page under the /docs prefix
  • basePath serverless > should have basePath field on Router
  • basePath serverless > should navigate to the page without refresh
  • basePath serverless > should use urls with basepath in router events
  • basePath serverless > should use urls with basepath in router events for hash changes
  • basePath serverless > should use urls with basepath in router events for cancelled routes
  • basePath serverless > should use urls with basepath in router events for failed route change
  • basePath serverless > should allow URL query strings without refresh
  • basePath serverless > should correctly replace state when same asPath but different url
  • basePath serverless > should always strip basePath in serverless-loader
Expand output

● basePath serverless › should add basePath to routes-manifest

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should prefetch pages correctly when manually called

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should prefetch pages correctly in viewport with

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should 404 for public file without basePath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should serve public file with basePath correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should rewrite with basePath by default

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not rewrite without basePath without disabling

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not rewrite with basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should rewrite without basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should redirect with basePath by default

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not redirect without basePath without disabling

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not redirect with basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should redirect without basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should add header with basePath by default

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not add header without basePath without disabling

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not add header with basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should add header without basePath when set to false

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should not update URL for a 404

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should handle 404 urls that start with basePath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate back to a non-basepath 404 that starts with basepath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should update dynamic params after mount correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate to index page with getStaticProps

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate to nested index page with getStaticProps

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should work with nested folder with same name as basePath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should work with normal dynamic page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should work with hash links

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should work with catch-all page

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should redirect trailing slash correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should redirect trailing slash on root correctly

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate an absolute url

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate an absolute local url with basePath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate an absolute local url without basePath

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should 404 when manually adding basePath with

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should 404 when manually adding basePath with router.push

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should 404 when manually adding basePath with router.replace

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should show the hello page under the /docs prefix

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should have correct router paths on first load of /

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should have correct router paths on first load of /hello

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should fetch data for getStaticProps without reloading

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should fetch data for getServerSideProps without reloading

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should have correct href for a link

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should have correct href for a link to /

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should show 404 for page not under the /docs prefix

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should show the other-page page under the /docs prefix

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should have basePath field on Router

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should navigate to the page without refresh

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should use urls with basepath in router events

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should use urls with basepath in router events for hash changes

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should use urls with basepath in router events for cancelled routes

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should use urls with basepath in router events for failed route change

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should allow URL query strings without refresh

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should correctly replace state when same asPath but different url

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● basePath serverless › should always strip basePath in serverless-loader

command failed with code 1

  132 |         code !== 0
  133 |       ) {
> 134 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  135 |       }
  136 | 
  137 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:134:23)

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  275 | export async function killApp(instance) {
  276 |   await new Promise((resolve, reject) => {
> 277 |     treeKill(instance.pid, (err) => {
      |                       ^
  278 |       if (err) {
  279 |         if (
  280 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:277:23
  at killApp (lib/next-test-utils.js:276:9)
  at integration/basepath/test/index.test.js:1097:11

@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 10.3s 10.7s ⚠️ +470ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.41 kB
Page Load Tests Overall decrease ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 1.903 1.91 ⚠️ +0.01
/ avg req/sec 1313.39 1309.18 ⚠️ -4.21
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.019 1.025 ⚠️ +0.01
/error-in-render avg req/sec 2452.84 2439.19 ⚠️ -13.65
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-512d5b9..081a.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-1203ff1..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 949 B 949 B
link.html gzip 955 B 955 B
withRouter.html gzip 940 B 940 B
Overall change 2.84 kB 2.84 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 11.8s 12.1s ⚠️ +288ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.41 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-512d5b9..081a.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-1203ff1..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.03 MB 1.03 MB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB
link.js 1.07 MB 1.07 MB
routerDirect.js 1.07 MB 1.07 MB
withRouter.js 1.07 MB 1.07 MB
Overall change 5.27 MB 5.27 MB
Commit: 05cad30

@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Failing test suites

Commit: 79597bb

test/integration/config/test/index.test.js

  • Configuration > renders server config on the server only
  • Configuration > renders public config on the server only
  • Configuration > should have config available on the client
Expand output

● Configuration › renders server config on the server only

expect(received).toBe(expected) // Object.is equality

Expected: "secret"
Received: ""

  83 |   test('renders server config on the server only', async () => {
  84 |     const $ = await get$('/next-config')
> 85 |     expect($('#server-only').text()).toBe('secret')
     |                                      ^
  86 |   })
  87 | 
  88 |   test('renders public config on the server only', async () => {

  at Object.<anonymous> (integration/config/test/index.test.js:85:38)

● Configuration › renders public config on the server only

expect(received).toBe(expected) // Object.is equality

Expected: "/static"
Received: ""

  88 |   test('renders public config on the server only', async () => {
  89 |     const $ = await get$('/next-config')
> 90 |     expect($('#server-and-client').text()).toBe('/static')
     |                                            ^
  91 |   })
  92 | 
  93 |   test('renders the build id in development mode', async () => {

  at Object.<anonymous> (integration/config/test/index.test.js:90:44)

● Configuration › should have config available on the client

NoSuchElementError: no such element: Unable to locate element: {"method":"css selector","selector":"#server-only"}
  (Session info: headless chrome=84.0.4147.105)

  104 |     const browser = await webdriver(context.appPort, '/next-config')
  105 | 
> 106 |     const serverText = await browser.elementByCss('#server-only').text()
      |                        ^
  107 |     const serverClientText = await browser
  108 |       .elementByCss('#server-and-client')
  109 |       .text()

  at Object.throwDecodedError (../node_modules/selenium-webdriver/lib/error.js:550:15)
  at parseHttpResponse (../node_modules/selenium-webdriver/lib/http.js:565:13)
  at Executor.execute (../node_modules/selenium-webdriver/lib/http.js:491:26)
  at thenableWebDriverProxy.execute (../node_modules/selenium-webdriver/lib/webdriver.js:700:17)
  at Object.<anonymous> (integration/config/test/index.test.js:106:24)

test/integration/development-runtime-config/test/index.test.js

  • should work with runtime-config in next.config.js > empty runtime-config
  • should work with runtime-config in next.config.js > with runtime-config
Expand output

● should work with runtime-config in next.config.js › empty runtime-config

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  37 |     /Cannot read property 'serverRuntimeConfig' of undefined/i
  38 |   )
> 39 |   expect(JSON.parse($('#server-runtime-config').text())).toEqual(
     |               ^
  40 |     config.serverRuntimeConfig || {}
  41 |   )
  42 |   expect(JSON.parse($('#public-runtime-config').text())).toEqual(

  at runApp (integration/development-runtime-config/test/index.test.js:39:15)
  at Object.<anonymous> (integration/development-runtime-config/test/index.test.js:57:5)

● should work with runtime-config in next.config.js › with runtime-config

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)

  37 |     /Cannot read property 'serverRuntimeConfig' of undefined/i
  38 |   )
> 39 |   expect(JSON.parse($('#server-runtime-config').text())).toEqual(
     |               ^
  40 |     config.serverRuntimeConfig || {}
  41 |   )
  42 |   expect(JSON.parse($('#public-runtime-config').text())).toEqual(

  at runApp (integration/development-runtime-config/test/index.test.js:39:15)
  at Object.<anonymous> (integration/development-runtime-config/test/index.test.js:77:5)

test/integration/amphtml/test/index.test.js

  • AMP Usage > production mode > canonical amphtml > should allow manually setting canonical
  • AMP Usage > production mode > canonical amphtml > should allow manually setting amphtml rel
Expand output

● AMP Usage › production mode › canonical amphtml › should allow manually setting canonical

expect(received).toBe(expected) // Object.is equality

Expected: "/my-custom-canonical"
Received: "http://localhost:1234/manual-rels"

  203 |         const $ = cheerio.load(html)
  204 |         await validateAMP(html)
> 205 |         expect($('link[rel=canonical]').attr('href')).toBe(
      |                                                       ^
  206 |           '/my-custom-canonical'
  207 |         )
  208 |       })

  at Object.<anonymous> (integration/amphtml/test/index.test.js:205:55)

● AMP Usage › production mode › canonical amphtml › should allow manually setting amphtml rel

expect(received).toBe(expected) // Object.is equality

Expected: "/my-custom-amphtml"
Received: "http://localhost:1234/manual-rels.amp"

  211 |         const html = await renderViaHTTP(appPort, '/manual-rels')
  212 |         const $ = cheerio.load(html)
> 213 |         expect($('link[rel=amphtml]').attr('href')).toBe('/my-custom-amphtml')
      |                                                     ^
  214 |         expect($('link[rel=amphtml]')).toHaveLength(1)
  215 |       })
  216 |     })

  at Object.<anonymous> (integration/amphtml/test/index.test.js:213:53)

test/integration/client-navigation/test/index.test.js

  • Client Navigation > Rendering via HTTP > should handle undefined prop in head server-side
  • Client Navigation > Rendering via HTTP > header helper renders header information
  • Client Navigation > Rendering via HTTP > header helper dedupes tags
  • Client Navigation > Rendering via HTTP > header helper dedupes tags with the same key as the default
  • Client Navigation > Rendering via HTTP > header helper avoids dedupe of specific tags
  • Client Navigation > Rendering via HTTP > header helper renders Fragment children
Expand output

● Client Navigation › Rendering via HTTP › should handle undefined prop in head server-side

TypeError: Cannot use 'in' operator to search for 'content' in undefined

  34 |       const html = await render('/head')
  35 |       const $ = cheerio.load(html)
> 36 |       const value = 'content' in $('meta[name="empty-content"]').attr()
     |                     ^
  37 | 
  38 |       expect(value).toBe(false)
  39 |     })

  at Object.<anonymous> (integration/client-navigation/test/rendering.js:36:21)
      at runMicrotasks (<anonymous>)

● Client Navigation › Rendering via HTTP › header helper renders header information

expect(received).toBeTruthy()

Received: false

  72 |     test('header helper renders header information', async () => {
  73 |       const html = await render('/head')
> 74 |       expect(html.includes('<meta charSet="iso-8859-5"/>')).toBeTruthy()
     |                                                             ^
  75 |       expect(html.includes('<meta content="my meta"/>')).toBeTruthy()
  76 |       expect(html).toContain(
  77 |         '<meta name="viewport" content="width=device-width,initial-scale=1"/>'

  at Object.<anonymous> (integration/client-navigation/test/rendering.js:74:61)
      at runMicrotasks (<anonymous>)

● Client Navigation › Rendering via HTTP › header helper dedupes tags

expect(received).toContain(expected) // indexOf

Expected substring: "<meta charSet=\"iso-8859-5\"/>"
Received string:    "<!DOCTYPE html><html><head><style data-next-hide-fouc=\"true\">body{display:none}</style><noscript data-next-hide-fouc=\"true\"><style>body{display:block}</style></noscript><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><link rel=\"preload\" href=\"/_next/static/chunks/main.js?ts=1597901660891\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/webpack.js?ts=1597901660891\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app.js?ts=1597901660891\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/head.js?ts=1597901660891\" as=\"script\"/><noscript id=\"__next_css__DO_NOT_USE__\"></noscript></head><body><div id=\"__next\"><div><h1>I can have meta tags</h1></div></div><script src=\"/_next/static/chunks/react-refresh.js?ts=1597901660891\"></script><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/head\",\"query\":{},\"buildId\":\"development\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}</script><script nomodule=\"\" src=\"/_next/static/chunks/polyfills.js?ts=1597901660891\"></script><script src=\"/_next/static/chunks/main.js?ts=1597901660891\"></script><script src=\"/_next/static/chunks/webpack.js?ts=1597901660891\"></script><script src=\"/_next/static/chunks/pages/_app.js?ts=1597901660891\"></script><script src=\"/_next/static/chunks/pages/head.js?ts=1597901660891\"></script><script src=\"/_next/static/development/_buildManifest.js?ts=1597901660891\"></script><script src=\"/_next/static/development/_ssgManifest.js?ts=1597901660891\"></script></body></html>"

  82 |     test('header helper dedupes tags', async () => {
  83 |       const html = await render('/head')
> 84 |       expect(html).toContain('<meta charSet="iso-8859-5"/>')
     |                    ^
  85 |       expect(html).not.toContain('<meta charSet="utf-8"/>')
  86 |       expect(html).toContain(
  87 |         '<meta name="viewport" content="width=device-width,initial-scale=1"/>'

  at Object.<anonymous> (integration/client-navigation/test/rendering.js:84:20)
      at runMicrotasks (<anonymous>)

● Client Navigation › Rendering via HTTP › header helper dedupes tags with the same key as the default

expect(received).toContain(expected) // indexOf

Expected substring: "<meta charSet=\"iso-8859-1\"/>"
Received string:    "<!DOCTYPE html><html><head><style data-next-hide-fouc=\"true\">body{display:none}</style><noscript data-next-hide-fouc=\"true\"><style>body{display:block}</style></noscript><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><link rel=\"preload\" href=\"/_next/static/chunks/main.js?ts=1597901661195\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/webpack.js?ts=1597901661195\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app.js?ts=1597901661195\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/head-duplicate-default-keys.js?ts=1597901661195\" as=\"script\"/><noscript id=\"__next_css__DO_NOT_USE__\"></noscript></head><body><div id=\"__next\"><div><h1>Meta tags with same keys as default get deduped</h1></div></div><script src=\"/_next/static/chunks/react-refresh.js?ts=1597901661195\"></script><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/head-duplicate-default-keys\",\"query\":{},\"buildId\":\"development\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}</script><script nomodule=\"\" src=\"/_next/static/chunks/polyfills.js?ts=1597901661195\"></script><script src=\"/_next/static/chunks/main.js?ts=1597901661195\"></script><script src=\"/_next/static/chunks/webpack.js?ts=1597901661195\"></script><script src=\"/_next/static/chunks/pages/_app.js?ts=1597901661195\"></script><script src=\"/_next/static/chunks/pages/head-duplicate-default-keys.js?ts=1597901661195\"></script><script src=\"/_next/static/development/_buildManifest.js?ts=1597901661195\"></script><script src=\"/_next/static/development/_ssgManifest.js?ts=1597901661195\"></script></body></html>"

  116 |       // Expect exactly one `viewport`
  117 |       expect((html.match(/name="viewport"/g) || []).length).toBe(1)
> 118 |       expect(html).toContain('<meta charSet="iso-8859-1"/>')
      |                    ^
  119 |       expect(html).toContain('<meta name="viewport" content="width=500"/>')
  120 |     })
  121 | 

  at Object.<anonymous> (integration/client-navigation/test/rendering.js:118:20)
      at runMicrotasks (<anonymous>)

● Client Navigation › Rendering via HTTP › header helper avoids dedupe of specific tags

expect(received).toContain(expected) // indexOf

Expected substring: "<meta property=\"article:tag\" content=\"tag1\"/>"
Received string:    "<!DOCTYPE html><html><head><style data-next-hide-fouc=\"true\">body{display:none}</style><noscript data-next-hide-fouc=\"true\"><style>body{display:block}</style></noscript><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><link rel=\"preload\" href=\"/_next/static/chunks/main.js?ts=1597901661212\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/webpack.js?ts=1597901661212\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app.js?ts=1597901661212\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/head.js?ts=1597901661212\" as=\"script\"/><noscript id=\"__next_css__DO_NOT_USE__\"></noscript></head><body><div id=\"__next\"><div><h1>I can have meta tags</h1></div></div><script src=\"/_next/static/chunks/react-refresh.js?ts=1597901661212\"></script><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/head\",\"query\":{},\"buildId\":\"development\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}</script><script nomodule=\"\" src=\"/_next/static/chunks/polyfills.js?ts=1597901661212\"></script><script src=\"/_next/static/chunks/main.js?ts=1597901661212\"></script><script src=\"/_next/static/chunks/webpack.js?ts=1597901661212\"></script><script src=\"/_next/static/chunks/pages/_app.js?ts=1597901661212\"></script><script src=\"/_next/static/chunks/pages/head.js?ts=1597901661212\"></script><script src=\"/_next/static/development/_buildManifest.js?ts=1597901661212\"></script><script src=\"/_next/static/development/_ssgManifest.js?ts=1597901661212\"></script></body></html>"

  122 |     test('header helper avoids dedupe of specific tags', async () => {
  123 |       const html = await render('/head')
> 124 |       expect(html).toContain('<meta property="article:tag" content="tag1"/>')
      |                    ^
  125 |       expect(html).toContain('<meta property="article:tag" content="tag2"/>')
  126 |       expect(html).not.toContain('<meta property="dedupe:tag" content="tag3"/>')
  127 |       expect(html).toContain('<meta property="dedupe:tag" content="tag4"/>')

  at Object.<anonymous> (integration/client-navigation/test/rendering.js:124:20)
      at runMicrotasks (<anonymous>)

● Client Navigation › Rendering via HTTP › header helper renders Fragment children

expect(received).toContain(expected) // indexOf

Expected substring: "<title>Fragment title</title>"
Received string:    "<!DOCTYPE html><html><head><style data-next-hide-fouc=\"true\">body{display:none}</style><noscript data-next-hide-fouc=\"true\"><style>body{display:block}</style></noscript><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><link rel=\"preload\" href=\"/_next/static/chunks/main.js?ts=1597901661220\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/webpack.js?ts=1597901661220\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app.js?ts=1597901661220\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/head.js?ts=1597901661220\" as=\"script\"/><noscript id=\"__next_css__DO_NOT_USE__\"></noscript></head><body><div id=\"__next\"><div><h1>I can have meta tags</h1></div></div><script src=\"/_next/static/chunks/react-refresh.js?ts=1597901661220\"></script><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/head\",\"query\":{},\"buildId\":\"development\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}</script><script nomodule=\"\" src=\"/_next/static/chunks/polyfills.js?ts=1597901661220\"></script><script src=\"/_next/static/chunks/main.js?ts=1597901661220\"></script><script src=\"/_next/static/chunks/webpack.js?ts=1597901661220\"></script><script src=\"/_next/static/chunks/pages/_app.js?ts=1597901661220\"></script><script src=\"/_next/static/chunks/pages/head.js?ts=1597901661220\"></script><script src=\"/_next/static/development/_buildManifest.js?ts=1597901661220\"></script><script src=\"/_next/static/development/_ssgManifest.js?ts=1597901661220\"></script></body></html>"

  171 |     test('header helper renders Fragment children', async () => {
  172 |       const html = await render('/head')
> 173 |       expect(html).toContain('<title>Fragment title</title>')
      |                    ^
  174 |       expect(html).toContain('<meta content="meta fragment"/>')
  175 |     })
  176 | 

  at Object.<anonymous> (integration/client-navigation/test/rendering.js:173:20)
      at runMicrotasks (<anonymous>)

@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 13.7s 13.7s ⚠️ +40ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.28 kB
Page Load Tests Overall increase ✓
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.658 2.582 -0.08
/ avg req/sec 940.66 968.16 +27.5
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.675 1.63 -0.05
/error-in-render avg req/sec 1492.1 1533.54 +41.44
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-072263f..ffd7.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-a951a64..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 948 B 948 B
link.html gzip 954 B 954 B
withRouter.html gzip 940 B 940 B
Overall change 2.84 kB 2.84 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 15.5s 15.5s -10ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.28 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-072263f..ffd7.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-a951a64..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.03 MB 1.03 MB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB
link.js 1.07 MB 1.07 MB
routerDirect.js 1.07 MB 1.07 MB
withRouter.js 1.07 MB 1.07 MB
Overall change 5.27 MB 5.27 MB
Commit: 79597bb

@elliottsj elliottsj force-pushed the resolve-dont-preserve-symlinks branch from 79597bb to fc9aeae Compare August 20, 2020 05:39
@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 13.4s 13.5s ⚠️ +152ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.32 kB
Page Load Tests Overall increase ✓
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.738 2.613 -0.12
/ avg req/sec 913.23 956.84 +43.61
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.559 1.516 -0.04
/error-in-render avg req/sec 1603.25 1649.44 +46.19
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-072263f..ffd7.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-a951a64..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 948 B 948 B
link.html gzip 954 B 954 B
withRouter.html gzip 940 B 940 B
Overall change 2.84 kB 2.84 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 15.3s 15.4s ⚠️ +87ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.32 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-072263f..ffd7.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-a951a64..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.03 MB 1.03 MB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB
link.js 1.07 MB 1.07 MB
routerDirect.js 1.07 MB 1.07 MB
withRouter.js 1.07 MB 1.07 MB
Overall change 5.27 MB 5.27 MB
Commit: fc9aeae

@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Failing test suites

Commit: fc9aeae

test/integration/font-optimization/test/index.test.js

  • Font optimization for SSR apps > should inline the google fonts for static pages with Next/Head
  • Font optimization for SSR apps > should inline the google fonts for SSR pages
  • Font optimization for emulated serverless apps > should inline the google fonts for static pages with Next/Head
  • Font optimization for emulated serverless apps > should inline the google fonts for SSR pages
Expand output

● Font optimization for SSR apps › should inline the google fonts for static pages with Next/Head

expect(received).toContain(expected) // indexOf

Expected substring: "<link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css2?family=Modak\"/>"
Received string:    "<!DOCTYPE html><html><head><link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css?family=Voces\"/><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><link rel=\"preload\" href=\"/_next/static/chunks/main-38c7f854d11b32d25afa.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/static-head-3b877f37a9df2b2b4d9b.js\" as=\"script\"/><style data-href=\"https://fonts.googleapis.com/css?family=Voces\">@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDmk.woff) format(\"woff\")}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PIDm_6pClI_ik.woff2) format(\"woff2\");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDm_6pClI.woff2) format(\"woff2\");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}</style></head><body><div id=\"__next\"><div>Hi!</div></div><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/static-head\",\"query\":{},\"buildId\":\"7-oI1aEdZDCWe2TuDOuTc\",\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}</script><script nomodule=\"\" src=\"/_next/static/chunks/polyfills-e60bf636a1339bc95b80.js\"></script><script src=\"/_next/static/chunks/main-38c7f854d11b32d25afa.js\" async=\"\"></script><script src=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" async=\"\"></script><script src=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" async=\"\"></script><script src=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" async=\"\"></script><script src=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/static-head-3b877f37a9df2b2b4d9b.js\" async=\"\"></script><script src=\"/_next/static/7-oI1aEdZDCWe2TuDOuTc/_buildManifest.js\" async=\"\"></script><script src=\"/_next/static/7-oI1aEdZDCWe2TuDOuTc/_ssgManifest.js\" async=\"\"></script></body></html>"

  56 |     const html = await renderViaHTTP(appPort, '/static-head')
  57 |     expect(await fsExists(builtPage('font-manifest.json'))).toBe(true)
> 58 |     expect(html).toContain(
     |                  ^
  59 |       '<link rel="stylesheet" data-href="https://fonts.googleapis.com/css2?family=Modak"/>'
  60 |     )
  61 |     expect(html).toMatch(

  at Object.<anonymous> (integration/font-optimization/test/index.test.js:58:18)

● Font optimization for SSR apps › should inline the google fonts for SSR pages

expect(received).toContain(expected) // indexOf

Expected substring: "<link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css2?family=Roboto:wght@700\"/>"
Received string:    "<!DOCTYPE html><html><head><link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css?family=Voces\"/><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><link rel=\"preload\" href=\"/_next/static/chunks/main-38c7f854d11b32d25afa.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/stars-7861c4f09f546bf9779a.js\" as=\"script\"/><style data-href=\"https://fonts.googleapis.com/css?family=Voces\">@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDmk.woff) format(\"woff\")}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PIDm_6pClI_ik.woff2) format(\"woff2\");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDm_6pClI.woff2) format(\"woff2\");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}</style></head><body><div id=\"__next\"><div class=\"container\"><main><div>Next stars: <!-- -->62.90468119750159</div></main></div></div><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{\"stars\":62.90468119750159}},\"page\":\"/stars\",\"query\":{},\"buildId\":\"7-oI1aEdZDCWe2TuDOuTc\",\"isFallback\":false,\"gip\":true}</script><script nomodule=\"\" src=\"/_next/static/chunks/polyfills-e60bf636a1339bc95b80.js\"></script><script src=\"/_next/static/chunks/main-38c7f854d11b32d25afa.js\" async=\"\"></script><script src=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" async=\"\"></script><script src=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" async=\"\"></script><script src=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" async=\"\"></script><script src=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/stars-7861c4f09f546bf9779a.js\" async=\"\"></script><script src=\"/_next/static/7-oI1aEdZDCWe2TuDOuTc/_buildManifest.js\" async=\"\"></script><script src=\"/_next/static/7-oI1aEdZDCWe2TuDOuTc/_ssgManifest.js\" async=\"\"></script></body></html>"

  67 |     const html = await renderViaHTTP(appPort, '/stars')
  68 |     expect(await fsExists(builtPage('font-manifest.json'))).toBe(true)
> 69 |     expect(html).toContain(
     |                  ^
  70 |       '<link rel="stylesheet" data-href="https://fonts.googleapis.com/css2?family=Roboto:wght@700"/>'
  71 |     )
  72 |     expect(html).toMatch(

  at Object.<anonymous> (integration/font-optimization/test/index.test.js:69:18)

● Font optimization for emulated serverless apps › should inline the google fonts for static pages with Next/Head

expect(received).toContain(expected) // indexOf

Expected substring: "<link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css2?family=Modak\"/>"
Received string:    "<!DOCTYPE html><html><head><link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css?family=Voces\"/><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><link rel=\"preload\" href=\"/_next/static/chunks/main-38c7f854d11b32d25afa.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/static-head-3b877f37a9df2b2b4d9b.js\" as=\"script\"/><style data-href=\"https://fonts.googleapis.com/css?family=Voces\">@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDmk.woff) format(\"woff\")}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PIDm_6pClI_ik.woff2) format(\"woff2\");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDm_6pClI.woff2) format(\"woff2\");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}</style></head><body><div id=\"__next\"><div>Hi!</div></div><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{}},\"page\":\"/static-head\",\"query\":{},\"buildId\":\"f1mMNvz9tLGnUs46Qe_Jv\",\"runtimeConfig\":{},\"nextExport\":true,\"autoExport\":true,\"isFallback\":false}</script><script nomodule=\"\" src=\"/_next/static/chunks/polyfills-e60bf636a1339bc95b80.js\"></script><script src=\"/_next/static/chunks/main-38c7f854d11b32d25afa.js\" async=\"\"></script><script src=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" async=\"\"></script><script src=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" async=\"\"></script><script src=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" async=\"\"></script><script src=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/static-head-3b877f37a9df2b2b4d9b.js\" async=\"\"></script><script src=\"/_next/static/f1mMNvz9tLGnUs46Qe_Jv/_buildManifest.js\" async=\"\"></script><script src=\"/_next/static/f1mMNvz9tLGnUs46Qe_Jv/_ssgManifest.js\" async=\"\"></script></body></html>"

  56 |     const html = await renderViaHTTP(appPort, '/static-head')
  57 |     expect(await fsExists(builtPage('font-manifest.json'))).toBe(true)
> 58 |     expect(html).toContain(
     |                  ^
  59 |       '<link rel="stylesheet" data-href="https://fonts.googleapis.com/css2?family=Modak"/>'
  60 |     )
  61 |     expect(html).toMatch(

  at Object.<anonymous> (integration/font-optimization/test/index.test.js:58:18)

● Font optimization for emulated serverless apps › should inline the google fonts for SSR pages

expect(received).toContain(expected) // indexOf

Expected substring: "<link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css2?family=Roboto:wght@700\"/>"
Received string:    "<!DOCTYPE html><html><head><link rel=\"stylesheet\" data-href=\"https://fonts.googleapis.com/css?family=Voces\"/><meta charSet=\"utf-8\"/><meta name=\"viewport\" content=\"width=device-width\"/><meta name=\"next-head-count\" content=\"2\"/><link rel=\"preload\" href=\"/_next/static/chunks/main-38c7f854d11b32d25afa.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" as=\"script\"/><link rel=\"preload\" href=\"/_next/static/chunks/pages/stars-7861c4f09f546bf9779a.js\" as=\"script\"/><style data-href=\"https://fonts.googleapis.com/css?family=Voces\">@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDmk.woff) format(\"woff\")}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PIDm_6pClI_ik.woff2) format(\"woff2\");unicode-range:U+0100-024f,U+0259,U+1e??,U+2020,U+20a0-20ab,U+20ad-20cf,U+2113,U+2c60-2c7f,U+a720-a7ff}@font-face{font-family:Voces;font-style:normal;font-weight:400;src:local(\"Voces Regular\"),local(\"Voces-Regular\"),url(https://fonts.gstatic.com/s/voces/v10/-F6_fjJyLyU8d7PGDm_6pClI.woff2) format(\"woff2\");unicode-range:U+00??,U+0131,U+0152-0153,U+02bb-02bc,U+02c6,U+02da,U+02dc,U+2000-206f,U+2074,U+20ac,U+2122,U+2191,U+2193,U+2212,U+2215,U+feff,U+fffd}</style></head><body><div id=\"__next\"><div class=\"container\"><main><div>Next stars: <!-- -->80.74509417778097</div></main></div></div><script id=\"__NEXT_DATA__\" type=\"application/json\">{\"props\":{\"pageProps\":{\"stars\":80.74509417778097}},\"page\":\"/stars\",\"query\":{},\"buildId\":\"f1mMNvz9tLGnUs46Qe_Jv\",\"runtimeConfig\":{},\"nextExport\":false,\"isFallback\":false,\"gip\":true}</script><script nomodule=\"\" src=\"/_next/static/chunks/polyfills-e60bf636a1339bc95b80.js\"></script><script src=\"/_next/static/chunks/main-38c7f854d11b32d25afa.js\" async=\"\"></script><script src=\"/_next/static/chunks/webpack-e067438c4cf4ef2ef178.js\" async=\"\"></script><script src=\"/_next/static/chunks/framework.d462f293190b01a8404a.js\" async=\"\"></script><script src=\"/_next/static/chunks/279ac2b5366948f8a3fe6b33a5b1c5337242d383.19e1b567f96fc2e5cbe6.js\" async=\"\"></script><script src=\"/_next/static/chunks/f6078781a05fe1bcb0902d23dbbb2662c8d200b3.458970f5ced737ef7dfd.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/_app-4bff2fda9499ea38a103.js\" async=\"\"></script><script src=\"/_next/static/chunks/pages/stars-7861c4f09f546bf9779a.js\" async=\"\"></script><script src=\"/_next/static/f1mMNvz9tLGnUs46Qe_Jv/_buildManifest.js\" async=\"\"></script><script src=\"/_next/static/f1mMNvz9tLGnUs46Qe_Jv/_ssgManifest.js\" async=\"\"></script></body></html>"

  67 |     const html = await renderViaHTTP(appPort, '/stars')
  68 |     expect(await fsExists(builtPage('font-manifest.json'))).toBe(true)
> 69 |     expect(html).toContain(
     |                  ^
  70 |       '<link rel="stylesheet" data-href="https://fonts.googleapis.com/css2?family=Roboto:wght@700"/>'
  71 |     )
  72 |     expect(html).toMatch(

  at Object.<anonymous> (integration/font-optimization/test/index.test.js:69:18)

test/integration/amphtml/test/index.test.js

  • AMP Usage > production mode > canonical amphtml > should allow manually setting canonical
  • AMP Usage > production mode > canonical amphtml > should allow manually setting amphtml rel
Expand output

● AMP Usage › production mode › canonical amphtml › should allow manually setting canonical

expect(received).toBe(expected) // Object.is equality

Expected: "/my-custom-canonical"
Received: "http://localhost:1234/manual-rels"

  203 |         const $ = cheerio.load(html)
  204 |         await validateAMP(html)
> 205 |         expect($('link[rel=canonical]').attr('href')).toBe(
      |                                                       ^
  206 |           '/my-custom-canonical'
  207 |         )
  208 |       })

  at Object.<anonymous> (integration/amphtml/test/index.test.js:205:55)

● AMP Usage › production mode › canonical amphtml › should allow manually setting amphtml rel

expect(received).toBe(expected) // Object.is equality

Expected: "/my-custom-amphtml"
Received: "http://localhost:1234/manual-rels.amp"

  211 |         const html = await renderViaHTTP(appPort, '/manual-rels')
  212 |         const $ = cheerio.load(html)
> 213 |         expect($('link[rel=amphtml]').attr('href')).toBe('/my-custom-amphtml')
      |                                                     ^
  214 |         expect($('link[rel=amphtml]')).toHaveLength(1)
  215 |       })
  216 |     })

  at Object.<anonymous> (integration/amphtml/test/index.test.js:213:53)

@elliottsj elliottsj force-pushed the resolve-dont-preserve-symlinks branch 2 times, most recently from 54b7e77 to 9df49d2 Compare August 20, 2020 05:56
@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 12.4s 12.4s
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.57 kB
Page Load Tests Overall decrease ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.326 2.433 ⚠️ +0.11
/ avg req/sec 1075.02 1027.49 ⚠️ -47.53
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.424 1.458 ⚠️ +0.03
/error-in-render avg req/sec 1755.74 1715.24 ⚠️ -40.5
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-072263f..ffd7.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-a951a64..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 948 B 948 B
link.html gzip 954 B 954 B
withRouter.html gzip 940 B 940 B
Overall change 2.84 kB 2.84 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 13.8s 14.2s ⚠️ +396ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.57 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-072263f..ffd7.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-a951a64..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.03 MB 1.03 MB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB
link.js 1.07 MB 1.07 MB
routerDirect.js 1.07 MB 1.07 MB
withRouter.js 1.07 MB 1.07 MB
Overall change 5.27 MB 5.27 MB
Commit: 54b7e77

@ijjk
Copy link
Member

ijjk commented Aug 20, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 10.4s 10.4s -39ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.57 kB
Page Load Tests Overall increase ✓
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 1.986 2.014 ⚠️ +0.03
/ avg req/sec 1258.74 1241.05 ⚠️ -17.69
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.257 1.231 -0.03
/error-in-render avg req/sec 1989.62 2031.05 +41.43
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-072263f..ffd7.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-a951a64..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 948 B 948 B
link.html gzip 954 B 954 B
withRouter.html gzip 940 B 940 B
Overall change 2.84 kB 2.84 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 12s 11.7s -368ms
nodeModulesSize 57.7 MB 57.7 MB ⚠️ +1.57 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..4e55.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39 kB 39 kB
main-072263f..ffd7.js gzip 7.2 kB 7.2 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 57.2 kB 57.2 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.11 kB 6.11 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-a951a64..dule.js gzip 6.21 kB 6.21 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52 kB 52 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-1464c..a26f.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-000f151..65d4.js gzip 1.29 kB 1.29 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.69 kB 7.69 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-e550f..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-4cfda7a..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.35 kB 5.35 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 322 B 322 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 651 B 651 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.03 MB 1.03 MB
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB
link.js 1.07 MB 1.07 MB
routerDirect.js 1.07 MB 1.07 MB
withRouter.js 1.07 MB 1.07 MB
Overall change 5.27 MB 5.27 MB
Commit: 9df49d2

@elliottsj elliottsj marked this pull request as ready for review August 20, 2020 06:17
@elliottsj elliottsj changed the title Do not preserve symlinks in resolveRequest Follow symlinks in resolveRequest Aug 20, 2020
@elliottsj elliottsj force-pushed the resolve-dont-preserve-symlinks branch from 3664512 to edb8731 Compare October 11, 2020 00:12
@elliottsj elliottsj force-pushed the resolve-dont-preserve-symlinks branch from edb8731 to 64ff5a5 Compare October 11, 2020 00:13
@ijjk
Copy link
Member

ijjk commented Oct 11, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 12.3s 12.1s -166ms
nodeModulesSize 63.4 MB 63.4 MB ⚠️ +4.08 kB
Page Load Tests Overall decrease ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.28 2.267 -0.01
/ avg req/sec 1096.28 1102.71 +6.43
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.229 1.236 ⚠️ +0.01
/error-in-render avg req/sec 2034.77 2022.56 ⚠️ -12.21
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..133b.js gzip 11.1 kB 11.1 kB
framework.HASH.js gzip 39 kB 39 kB
main-faae5f7..727a.js gzip 7.22 kB 7.22 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 58 kB 58 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.9 kB 6.9 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-d2ce890..dule.js gzip 6.28 kB 6.28 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52.9 kB 52.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 1 kB 1 kB
link.html gzip 1.01 kB 1.01 kB
withRouter.html gzip 995 B 995 B
Overall change 3.01 kB 3.01 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 13.6s 13.8s ⚠️ +144ms
nodeModulesSize 63.4 MB 63.4 MB ⚠️ +4.08 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..133b.js gzip 11.1 kB 11.1 kB
framework.HASH.js gzip 39 kB 39 kB
main-faae5f7..727a.js gzip 7.22 kB 7.22 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 58 kB 58 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.9 kB 6.9 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-d2ce890..dule.js gzip 6.28 kB 6.28 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52.9 kB 52.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.05 MB 1.05 MB
404.html 4.34 kB 4.34 kB
hooks.html 3.92 kB 3.92 kB
index.js 1.05 MB 1.05 MB
link.js 1.1 MB 1.1 MB
routerDirect.js 1.09 MB 1.09 MB
withRouter.js 1.09 MB 1.09 MB
Overall change 5.41 MB 5.41 MB
Commit: edb8731

@ijjk
Copy link
Member

ijjk commented Oct 11, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 12.1s 11.9s -133ms
nodeModulesSize 63.4 MB 63.4 MB ⚠️ +4.08 kB
Page Load Tests Overall increase ✓
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.251 2.156 -0.09
/ avg req/sec 1110.85 1159.35 +48.5
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.229 1.195 -0.03
/error-in-render avg req/sec 2034.49 2091.76 +57.27
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..133b.js gzip 11.1 kB 11.1 kB
framework.HASH.js gzip 39 kB 39 kB
main-faae5f7..727a.js gzip 7.22 kB 7.22 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 58 kB 58 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.9 kB 6.9 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-d2ce890..dule.js gzip 6.28 kB 6.28 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52.9 kB 52.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 1 kB 1 kB
link.html gzip 1.01 kB 1.01 kB
withRouter.html gzip 995 B 995 B
Overall change 3.01 kB 3.01 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 13.2s 13.1s -55ms
nodeModulesSize 63.4 MB 63.4 MB ⚠️ +4.08 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..133b.js gzip 11.1 kB 11.1 kB
framework.HASH.js gzip 39 kB 39 kB
main-faae5f7..727a.js gzip 7.22 kB 7.22 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 58 kB 58 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.9 kB 6.9 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-d2ce890..dule.js gzip 6.28 kB 6.28 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52.9 kB 52.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.05 MB 1.05 MB
404.html 4.34 kB 4.34 kB
hooks.html 3.92 kB 3.92 kB
index.js 1.05 MB 1.05 MB
link.js 1.1 MB 1.1 MB
routerDirect.js 1.09 MB 1.09 MB
withRouter.js 1.09 MB 1.09 MB
Overall change 5.41 MB 5.41 MB
Commit: 64ff5a5

Using npm allows us to skip the prepublish script by passing
'--ignore-scripts' (pnpm doesn't support this).

Write the .tgz file to the temp dir, to avoid conflicting with other
concurrent tests which may read files in 'packages/next/'
@ijjk
Copy link
Member

ijjk commented Oct 11, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 13.3s 13.2s -140ms
nodeModulesSize 63.4 MB 63.4 MB ⚠️ +4.08 kB
Page Load Tests Overall decrease ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.418 2.449 ⚠️ +0.03
/ avg req/sec 1034.03 1020.68 ⚠️ -13.35
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.281 1.286 ⚠️ +0.01
/error-in-render avg req/sec 1951.85 1944.51 ⚠️ -7.34
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..133b.js gzip 11.1 kB 11.1 kB
framework.HASH.js gzip 39 kB 39 kB
main-faae5f7..727a.js gzip 7.22 kB 7.22 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 58 kB 58 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.9 kB 6.9 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-d2ce890..dule.js gzip 6.28 kB 6.28 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52.9 kB 52.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 1 kB 1 kB
link.html gzip 1.01 kB 1.01 kB
withRouter.html gzip 995 B 995 B
Overall change 3.01 kB 3.01 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 14.4s 14.9s ⚠️ +503ms
nodeModulesSize 63.4 MB 63.4 MB ⚠️ +4.08 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..133b.js gzip 11.1 kB 11.1 kB
framework.HASH.js gzip 39 kB 39 kB
main-faae5f7..727a.js gzip 7.22 kB 7.22 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 58 kB 58 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.9 kB 6.9 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-d2ce890..dule.js gzip 6.28 kB 6.28 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52.9 kB 52.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.05 MB 1.05 MB
404.html 4.34 kB 4.34 kB
hooks.html 3.92 kB 3.92 kB
index.js 1.05 MB 1.05 MB
link.js 1.1 MB 1.1 MB
routerDirect.js 1.09 MB 1.09 MB
withRouter.js 1.09 MB 1.09 MB
Overall change 5.41 MB 5.41 MB
Commit: 6503234

@elliottsj
Copy link
Contributor Author

@Timer I added an integration test to ensure a basic Next.js app can build when using pnpm. Demo of the test failing here:

Let me know what you think.

@elliottsj elliottsj requested a review from Timer October 11, 2020 01:45
It failed on Windows due to conflicting path separators: '\' vs '/'
@ijjk
Copy link
Member

ijjk commented Oct 11, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 13.1s 13.1s ⚠️ +20ms
nodeModulesSize 63.4 MB 63.4 MB ⚠️ +4.08 kB
Page Load Tests Overall increase ✓
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.393 2.412 ⚠️ +0.02
/ avg req/sec 1044.71 1036.5 ⚠️ -8.21
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.36 1.29 -0.07
/error-in-render avg req/sec 1838.41 1937.33 +98.92
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..133b.js gzip 11.1 kB 11.1 kB
framework.HASH.js gzip 39 kB 39 kB
main-faae5f7..727a.js gzip 7.22 kB 7.22 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 58 kB 58 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.9 kB 6.9 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-d2ce890..dule.js gzip 6.28 kB 6.28 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52.9 kB 52.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 1 kB 1 kB
link.html gzip 1.01 kB 1.01 kB
withRouter.html gzip 995 B 995 B
Overall change 3.01 kB 3.01 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 14.5s 14.6s ⚠️ +170ms
nodeModulesSize 63.4 MB 63.4 MB ⚠️ +4.08 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..133b.js gzip 11.1 kB 11.1 kB
framework.HASH.js gzip 39 kB 39 kB
main-faae5f7..727a.js gzip 7.22 kB 7.22 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 58 kB 58 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.9 kB 6.9 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-d2ce890..dule.js gzip 6.28 kB 6.28 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52.9 kB 52.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.05 MB 1.05 MB
404.html 4.34 kB 4.34 kB
hooks.html 3.92 kB 3.92 kB
index.js 1.05 MB 1.05 MB
link.js 1.1 MB 1.1 MB
routerDirect.js 1.09 MB 1.09 MB
withRouter.js 1.09 MB 1.09 MB
Overall change 5.41 MB 5.41 MB
Commit: b4d6412

@ijjk
Copy link
Member

ijjk commented Oct 11, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 14s 13.5s -515ms
nodeModulesSize 63.4 MB 63.4 MB ⚠️ +4.08 kB
Page Load Tests Overall increase ✓
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
/ failed reqs 0 0
/ total time (seconds) 2.541 2.543 0
/ avg req/sec 983.75 982.93 ⚠️ -0.82
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.527 1.488 -0.04
/error-in-render avg req/sec 1637.01 1679.87 +42.86
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..133b.js gzip 11.1 kB 11.1 kB
framework.HASH.js gzip 39 kB 39 kB
main-faae5f7..727a.js gzip 7.22 kB 7.22 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 58 kB 58 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.9 kB 6.9 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-d2ce890..dule.js gzip 6.28 kB 6.28 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52.9 kB 52.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Rendered Page Sizes
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
index.html gzip 1 kB 1 kB
link.html gzip 1.01 kB 1.01 kB
withRouter.html gzip 995 B 995 B
Overall change 3.01 kB 3.01 kB

Serverless Mode
General Overall increase ⚠️
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
buildDuration 14.9s 15s ⚠️ +185ms
nodeModulesSize 63.4 MB 63.4 MB ⚠️ +4.08 kB
Client Bundles (main, webpack, commons)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..133b.js gzip 11.1 kB 11.1 kB
framework.HASH.js gzip 39 kB 39 kB
main-faae5f7..727a.js gzip 7.22 kB 7.22 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 58 kB 58 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
677f882d2ed8..dule.js gzip 6.9 kB 6.9 kB
framework.HA..dule.js gzip 39 kB 39 kB
main-d2ce890..dule.js gzip 6.28 kB 6.28 kB
webpack-07c5..dule.js gzip 751 B 751 B
Overall change 52.9 kB 52.9 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-9a0b9e1..b37e.js gzip 1.28 kB 1.28 kB
_error-ed1b0..8fbd.js gzip 3.44 kB 3.44 kB
hooks-89731c..c609.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-409b283..e3ab.js gzip 1.32 kB 1.32 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 7.73 kB 7.73 kB
Client Pages Modern
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_app-75d3a82..dule.js gzip 625 B 625 B
_error-4469a..dule.js gzip 2.29 kB 2.29 kB
hooks-cbf13f..dule.js gzip 387 B 387 B
index-b9a643..dule.js gzip 226 B 226 B
link-92d3016..dule.js gzip 1.28 kB 1.28 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-f..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_buildManifest.js gzip 323 B 323 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 652 B 652 B
Serverless bundles
vercel/next.js canary elliottsj/next.js resolve-dont-preserve-symlinks Change
_error.js 1.05 MB 1.05 MB
404.html 4.34 kB 4.34 kB
hooks.html 3.92 kB 3.92 kB
index.js 1.05 MB 1.05 MB
link.js 1.1 MB 1.1 MB
routerDirect.js 1.09 MB 1.09 MB
withRouter.js 1.09 MB 1.09 MB
Overall change 5.41 MB 5.41 MB
Commit: ecd23f9

@elliottsj
Copy link
Contributor Author

Looks like #17279 has been merged, so the changes in this PR are no longer necessary.

@timneutkens You commented here that the pnpm integration test could be improved. I implemented pnpm integration tests in an alternative way in this PR, isolated from the monorepo node_modules so the tests will have more correct results.

I'll leave this open in case you want to consider it.

Since I spent many hours debugging and documenting this issue and creating this fix prior to #17279, would you mind crediting me in the release notes?

@theprobugmaker
Copy link

+1 for giving @elliottsj credits as well. You did a great job buddy.

@timneutkens
Copy link
Member

Since I spent many hours debugging and documenting this issue and creating this fix prior to #17279, would you mind crediting me in the release notes?

For sure! Done!

I implemented pnpm integration tests in an alternative way in this PR, isolated from the monorepo node_modules so the tests will have more correct results.

Could you open a new PR with the tests so that it'll be easier to merge them 💯 Thanks!

@elliottsj
Copy link
Contributor Author

Will do, thanks 😄

@elliottsj
Copy link
Contributor Author

@timneutkens Done; created #17882

Closing this one.

@elliottsj elliottsj closed this Oct 14, 2020
@elliottsj elliottsj deleted the resolve-dont-preserve-symlinks branch October 14, 2020 15:07
elliottsj added a commit to elliottsj/next.js that referenced this pull request Jan 9, 2021
elliottsj added a commit to elliottsj/next.js that referenced this pull request Jan 10, 2021
@vercel vercel locked as resolved and limited conversation to collaborators Jan 29, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9.5.x build fails if node_modules folder is a symlink and imported packages use hooks
9 participants