d7d636adf5
### What & Why This PR helps fixes a long time tree-shaking issue that if you're import some identifiers from client components, the whole client component is being included in the client chunk. Because we're using import eager mode in webpack to include all the client component modules that make sure they're present in SSR entry and browser entry when they're transformed to client reference on RSC layer. But the way we collect client components is a bit "aggressive" where contains some spaces to optimize. ### How We change the collected client components from simpliy collecting it resolved module request, into collecting both the imported identifiers (by server components) and the module request. And when we inserted the used client components imports into the SSR and Client entry, leverage webpack magic comments `"webpackExports"` to only contain the used exports in the bundle. Thank you webpack for this nice feature : ) Along the way we also fixed an issue that when you only used default export, the `default` export itself should also be proxied when the bundle is in ESM. #### Notice There's a limitation yet that it can't work with barrel file, if you have a shared component `index.js` to re-export the changes several client components there and you only partially import few from `index.js` it won't work. For the cases that the node_modules package contain a barrel file importing multiple client components, please use [optimizePackageImports](https://nextjs.org/docs/app/api-reference/next-config-js/optimizePackageImports) config for now. We'll have follow up optimizations ### Testing Result If we compare the `react-aria-components` the reproduction from #60246, you'll see the result being optimized a lot: #### After vs Before 134KB being tree-shaked out 🤯 ``` Route (app) Size First Load JS ┌ ○ / 324 B 127 kB ├ ○ /_not-found 872 B 86.5 kB └ ○ /other-page 174 B 127 kB ``` ``` Route (app) Size First Load JS ┌ ○ / 325 B 261 kB ├ ○ /_not-found 870 B 86.5 kB └ ○ /other-page 176 B 261 kB ``` Fixes #60246 Related report: https://github.com/adobe/react-spectrum/issues/5639 Closes NEXT-2527 phase 1 of NEXT-1799 --------- Co-authored-by: Shu Ding <g@shud.in> |
||
---|---|---|
.cargo | ||
.config | ||
.devcontainer | ||
.github | ||
.husky | ||
.vscode | ||
bench | ||
contributing | ||
docs | ||
errors | ||
examples | ||
packages | ||
scripts | ||
test | ||
turbo/generators | ||
.alexignore | ||
.alexrc | ||
.eslintignore | ||
.eslintrc.json | ||
.git-blame-ignore-revs | ||
.gitattributes | ||
.gitignore | ||
.node-version | ||
.npmrc | ||
.prettierignore | ||
.prettierignore_staged | ||
.prettierrc.json | ||
.rustfmt.toml | ||
azure-pipelines.yml | ||
Cargo.lock | ||
Cargo.toml | ||
CODE_OF_CONDUCT.md | ||
contributing.md | ||
jest.config.js | ||
jest.replay.config.js | ||
lerna.json | ||
license.md | ||
lint-staged.config.js | ||
package.json | ||
pnpm-lock.yaml | ||
pnpm-workspace.yaml | ||
readme.md | ||
release.js | ||
run-tests.js | ||
rust-toolchain | ||
socket.yaml | ||
test-file.txt | ||
tsconfig-tsec.json | ||
tsconfig.base.json | ||
tsconfig.json | ||
tsec-exemptions.json | ||
turbo.json | ||
UPGRADING.md | ||
vercel.json |
Next.js
Getting Started
Used by some of the world's largest companies, Next.js enables you to create full-stack web applications by extending the latest React features, and integrating powerful Rust-based JavaScript tooling for the fastest builds.
- Visit our Learn Next.js course to get started with Next.js.
- Visit the Next.js Showcase to see more sites built with Next.js.
Documentation
Visit https://nextjs.org/docs to view the full documentation.
Community
The Next.js community can be found on GitHub Discussions where you can ask questions, voice ideas, and share your projects with other people.
To chat with other community members you can join the Next.js Discord server.
Do note that our Code of Conduct applies to all Next.js community channels. Users are highly encouraged to read and adhere to them to avoid repercussions.
Contributing
Contributions to Next.js are welcome and highly appreciated. However, before you jump right into it, we would like you to review our Contribution Guidelines to make sure you have a smooth experience contributing to Next.js.
Good First Issues:
We have a list of good first issues that contain bugs that have a relatively limited scope. This is a great place for newcomers and beginners alike to get started, gain experience, and get familiar with our contribution process.
Authors
A list of the original co-authors of Next.js that helped bring this amazing framework to life!
- Tim Neutkens (@timneutkens)
- Naoyuki Kanezawa (@nkzawa)
- Guillermo Rauch (@rauchg)
- Arunoda Susiripala (@arunoda)
- Tony Kovanen (@tonykovanen)
- Dan Zajdband (@impronunciable)
Security
If you believe you have found a security vulnerability in Next.js, we encourage you to responsibly disclose this and NOT open a public issue. We will investigate all legitimate reports. Email security@vercel.com
to disclose any security vulnerabilities. Alternatively, you can visit this link to know more about Vercel's security and report any security vulnerabilities.