No description
Find a file
Jiachi Liu 7404ea4c93
fix: mixing namespace import and named import client components (#64809)
### What

Reported by @MaxLeiter, when you mixing named import and wildcard import
to a client component, and if you clone the module it will missed others
exports except the named ones. This lead to an issue that rendered React
element type is `undefined`.

### Why

We're using a tree-shaking strategy that collects the imported
identifiers from client components on server components side. But in our
code `connection.dependency.ids` can be undefined when you're using
`import *`. So for that case we include all the exports.

In the flight client entry plugin, if we found there's named imports
that collected later, and the module is already being marked as
namespace import `*`, we merge the ids into "*", so the whole module and
all exports are respected.

Now there're few possible cases for a client component import:

During webpack build, in the outout going connections, there're
connection with empty imported ids (`[]`), cannot unable to detect the
imported ids (`['*']`) and detected named imported ids (`['a', 'b',
..]`). First two represnt to include the whole module and all exports,
but we might collect the named imports could come later than the whole
module. So if we found the existing collection already has `['*']` then
we keep using that regardless the collected named imports. This can
avoid the collected named imports cover "exports all" case, where we
will expose less exports for that collection module lead to the
undefined component error.

Closes NEXT-3177
2024-04-22 15:05:41 +02:00
.cargo chore: remove unused rust dependencies (#62176) 2024-04-16 17:48:06 +02:00
.config Update teamname in codeowners (#57775) 2023-10-31 12:33:13 +00:00
.devcontainer re-enable next-dev-tests (#47087) 2023-03-14 16:05:19 +01:00
.github Upgrade Turborepo (#64767) 2024-04-19 18:26:54 +00:00
.husky Replace pre-commit with husky (#38350) 2022-07-06 11:14:16 -05:00
.vscode Enable loading source maps for Next Server and React (#64527) 2024-04-22 12:40:23 +00:00
bench Fix basic-app benchmark application (#60842) 2024-01-20 20:35:20 -06:00
contributing chore: rename 'example bug' label to 'examples' (#64775) 2024-04-19 12:39:44 +02:00
docs Update 06-bundle-analyzer.mdx (#64740) 2024-04-19 20:43:26 +00:00
errors docs: clarify runtime (#64593) 2024-04-16 22:52:53 -05:00
examples Update Nav.tsx (#64818) 2024-04-21 19:41:07 -07:00
packages fix: mixing namespace import and named import client components (#64809) 2024-04-22 15:05:41 +02:00
scripts Reapply "chore(test): run related E2E deploy tests on PRs" (#64682) (#64712) 2024-04-19 11:02:43 +02:00
test fix: mixing namespace import and named import client components (#64809) 2024-04-22 15:05:41 +02:00
turbo/generators fix(generators): update errors gen (#60233) 2024-01-04 20:22:21 +01:00
.alexignore Integrate next-* crates from Turbopack (#47019) 2023-03-13 14:33:17 +01:00
.alexrc docs: Add "special" to the Alex allowlist (#48021) 2023-04-06 16:32:06 +02:00
.eslintignore Improve top level await coverage (#64508) 2024-04-17 17:44:40 +02:00
.eslintrc.json Use new JSX transform (#56294) 2023-12-09 00:17:50 +01:00
.git-blame-ignore-revs chore(git): add .git-blame-ignore-revs (#60582) 2024-01-12 16:09:58 -05:00
.gitattributes chore: update gitattributes with linguist-vendored (#54683) 2023-08-28 21:50:19 +00:00
.gitignore ci: report daily turbo integration test results from this repo (#58965) 2023-12-04 16:18:42 +01:00
.node-version Update .node-version (#56460) 2023-10-05 07:40:12 +00:00
.npmrc fix: npm publish provenance permissions (#48757) 2023-04-24 14:08:55 +00:00
.prettierignore Improve top level await coverage (#64508) 2024-04-17 17:44:40 +02:00
.prettierignore_staged Use local AMP validator to reduce test flakiness (#63838) 2024-03-28 20:25:35 +00:00
.prettierrc.json chore(examples): use default prettier for examples/templates (#60530) 2024-01-11 16:01:44 -07:00
.rustfmt.toml build(cargo): move workspaces manifest to top level (#48198) 2023-04-19 18:38:36 +02:00
azure-pipelines.yml use pathToFileUrl to make esm import()s work with absolute windows paths (#64386) 2024-04-12 19:58:13 +02:00
Cargo.lock build: Update swc_core to v0.90.33 (#64553) 2024-04-22 07:04:45 +00:00
Cargo.toml build: Update swc_core to v0.90.33 (#64553) 2024-04-22 07:04:45 +00:00
CODE_OF_CONDUCT.md updated code of conduct to v2.1 (#34208) 2022-02-10 18:11:42 -06:00
contributing.md chore: improve repo templates (#46629) 2023-03-01 09:25:51 -08:00
jest.config.js test: use replay jest runner to add current test name to recording (#60438) 2024-01-10 10:31:32 +01:00
jest.replay.config.js Add Replay integration for dev e2e tests (#40955) 2022-09-29 14:45:10 -07:00
lerna.json v14.3.0-canary.15 2024-04-21 23:21:40 +00:00
license.md chore: update Copyright time from 2023 to 2024 (#60071) 2024-01-02 11:06:02 -08:00
lint-staged.config.js add cargo fmt to lint staged (#56430) 2023-10-04 17:46:44 +00:00
package.json build: Update swc_core to v0.90.33 (#64553) 2024-04-22 07:04:45 +00:00
pnpm-lock.yaml Enable loading source maps for Next Server and React (#64527) 2024-04-22 12:40:23 +00:00
pnpm-workspace.yaml Remove next-dev and its test suite and benchmarks (#55983) 2023-09-26 05:22:39 +02:00
readme.md Monorepo (#5341) 2018-10-01 01:02:10 +02:00
release.js chore: update labels in workflows/templates (#63713) 2024-04-17 14:28:51 +02:00
run-tests.js chore: exit running related tests if there was no match (#64772) 2024-04-19 12:19:26 +02:00
rust-toolchain.toml chore: remove unused rust dependencies (#62176) 2024-04-16 17:48:06 +02:00
socket.yaml chore(ci): add socket.yaml (#54446) 2023-08-23 18:12:51 +00:00
test-file.txt Add additional file serving tests (#12479) 2020-05-04 11:58:19 -05:00
tsconfig-tsec.json Integrate tsec into the linting process (#33746) 2022-02-24 16:59:18 -08:00
tsconfig.base.json Stop using baseUrl in root tsconfig (#64117) 2024-04-09 00:25:43 +02:00
tsconfig.json chore: extends from shared base tsconfig (#59776) 2023-12-19 18:52:22 +01:00
tsec-exemptions.json next/script: Correctly apply async and defer props (#52939) 2024-04-15 15:01:50 -07:00
turbo.json Move next-swc Turborepo config to packages/next-swc (#64789) 2024-04-21 20:17:05 +02:00
UPGRADING.md docs: update broken link in UPGRADING.md (#60342) 2024-01-06 14:46:07 -08:00
vercel.json Silence GH Comments for Preview URLs (#18766) 2020-11-03 21:59:47 +00:00

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.

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!


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.