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

export: Don't add a slash on hash links #9973

Merged
merged 2 commits into from Jan 8, 2020

Conversation

Janpot
Copy link
Contributor

@Janpot Janpot commented Jan 7, 2020

Fixes #9678

Might not be worth fixing with regards to bundle size.

If I'm not mistaken this code is only included during export with trailing slash. So the impact on the bundle size should be acceptable.

@ijjk
Copy link
Member

ijjk commented Jan 7, 2020

Stats from current PR

Default Server Mode
General Overall increase ⚠️
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
buildDuration 13.7s 13.6s -17ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +62 B
Client Bundles (main, webpack, commons)
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
main-HASH.js gzip 5.13 kB 5.13 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..4cf7.js gzip 13.7 kB 13.7 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.5 kB 67.5 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
main-HASH.module.js gzip 4.19 kB 4.19 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.5 kB 12.5 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62.1 kB 62.1 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_app.js gzip 1.33 kB 1.33 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.9 kB 2.9 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.87 kB 9.87 kB
Client Pages Modern
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_app.module.js gzip 757 B 757 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.47 kB 2.47 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.41 kB 7.41 kB
Client Build Manifests
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
index.html gzip 1.02 kB 1.02 kB
link.html gzip 1.03 kB 1.03 kB
withRouter.html gzip 1.02 kB 1.02 kB
Overall change 3.07 kB 3.07 kB

Serverless Mode
General Overall increase ⚠️
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
buildDuration 13.8s 13.9s ⚠️ +47ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +62 B
Client Bundles (main, webpack, commons)
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
main-HASH.js gzip 5.13 kB 5.13 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..4cf7.js gzip 13.7 kB 13.7 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.5 kB 67.5 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
main-HASH.module.js gzip 4.19 kB 4.19 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.5 kB 12.5 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62.1 kB 62.1 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_app.js gzip 1.33 kB 1.33 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.9 kB 2.9 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.87 kB 9.87 kB
Client Pages Modern
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_app.module.js gzip 757 B 757 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.47 kB 2.47 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.41 kB 7.41 kB
Client Build Manifests
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_error.js gzip 77.7 kB 77.7 kB
hooks.html gzip 1.05 kB 1.05 kB
index.js gzip 78 kB 78 kB
link.js gzip 80.3 kB 80.3 kB
routerDirect.js gzip 78 kB 78 kB
withRouter.js gzip 78.1 kB 78.1 kB
Overall change 393 kB 393 kB

Commit: a1dff64

@Janpot
Copy link
Contributor Author

Janpot commented Jan 7, 2020

Also, if bundle size turns out to be a problem, I think we can probably also replace

  if (path) {
    path = path.replace(/\/$/, '')
    // Append a trailing slash if this path does not have an extension
    if (!/\.[^/]+\/?$/.test(path)) path += `/`
  }

with

  // Append a trailing slash if this path does not have an extension and does not have a trailing slash
  if (path && !/(\.[^/]+\/?$|\/$)/.test(path)) path += `/`

that should also shave off some of those bytes.

@Timer Timer added this to the 9.2.0 milestone Jan 8, 2020
Copy link
Member

@Timer Timer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks fine to me, and should only add 7 bytes pre-gzip. The new code is excluded unless you're using this feature.

@Timer
Copy link
Member

Timer commented Jan 8, 2020

Thanks!

@ijjk
Copy link
Member

ijjk commented Jan 8, 2020

Stats from current PR

Default Server Mode
General Overall increase ⚠️
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
buildDuration 13.9s 13.9s -9ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +62 B
Client Bundles (main, webpack, commons)
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
main-HASH.js gzip 5.11 kB 5.11 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..9881.js gzip 13.7 kB 13.7 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.4 kB 67.4 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
main-HASH.module.js gzip 4.17 kB 4.17 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.5 kB 12.5 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62.1 kB 62.1 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_app.js gzip 1.33 kB 1.33 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.9 kB 2.9 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.87 kB 9.87 kB
Client Pages Modern
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_app.module.js gzip 757 B 757 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.47 kB 2.47 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.41 kB 7.41 kB
Client Build Manifests
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Rendered Page Sizes
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
index.html gzip 1.02 kB 1.02 kB
link.html gzip 1.03 kB 1.03 kB
withRouter.html gzip 1.01 kB 1.01 kB
Overall change 3.06 kB 3.06 kB

Serverless Mode
General Overall increase ⚠️
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
buildDuration 13.8s 14.2s ⚠️ +374ms
nodeModulesSize 48.9 MB 48.9 MB ⚠️ +62 B
Client Bundles (main, webpack, commons)
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
main-HASH.js gzip 5.11 kB 5.11 kB
webpack-HASH.js gzip 746 B 746 B
4952ddcd88e7..54d3.js gzip 4.68 kB 4.68 kB
commons.HASH.js gzip 4.06 kB 4.06 kB
de003c3a9d30..9881.js gzip 13.7 kB 13.7 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
Overall change 67.4 kB 67.4 kB
Client Bundles (main, webpack, commons) Modern
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
main-HASH.module.js gzip 4.17 kB 4.17 kB
webpack-HASH..dule.js gzip 746 B 746 B
4952ddcd88e7..dule.js gzip 5.56 kB 5.56 kB
de003c3a9d30..dule.js gzip 12.5 kB 12.5 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
Overall change 62.1 kB 62.1 kB
Legacy Client Bundles (polyfills)
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
polyfills-HASH.js gzip 4.76 kB 4.76 kB
Overall change 4.76 kB 4.76 kB
Client Pages
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_app.js gzip 1.33 kB 1.33 kB
_error.js gzip 4.07 kB 4.07 kB
hooks.js gzip 779 B 779 B
index.js gzip 222 B 222 B
link.js gzip 2.9 kB 2.9 kB
routerDirect.js gzip 283 B 283 B
withRouter.js gzip 282 B 282 B
Overall change 9.87 kB 9.87 kB
Client Pages Modern
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_app.module.js gzip 757 B 757 B
_error.module.js gzip 3.06 kB 3.06 kB
hooks.module.js gzip 371 B 371 B
index.module.js gzip 212 B 212 B
link.module.js gzip 2.47 kB 2.47 kB
routerDirect..dule.js gzip 273 B 273 B
withRouter.m..dule.js gzip 272 B 272 B
Overall change 7.41 kB 7.41 kB
Client Build Manifests
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_buildManifest.js gzip 61 B 61 B
_buildManife..dule.js gzip 61 B 61 B
Overall change 122 B 122 B
Serverless bundles
zeit/next.js canary Janpot/next.js fix-hash-trailing-slash Change
_error.js gzip 77.7 kB 77.7 kB
hooks.html gzip 1.05 kB 1.05 kB
index.js gzip 78 kB 78 kB
link.js gzip 80.4 kB 80.4 kB
routerDirect.js gzip 78 kB 78 kB
withRouter.js gzip 78.1 kB 78.1 kB
Overall change 393 kB 393 kB

Commit: 55f070b

@Timer Timer merged commit 2112e81 into vercel:canary Jan 8, 2020
@oliviertassinari
Copy link
Contributor

@Janpot Thanks

@Timer
Copy link
Member

Timer commented Jan 8, 2020

Published as v9.1.8-canary.7 — please try it out!

@vercel vercel locked as resolved and limited conversation to collaborators Jan 31, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

exportTrailingSlash with hash links produces broken links
4 participants