-
Notifications
You must be signed in to change notification settings - Fork 27.4k
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
"You're importing a component that needs next/headers." for unreachable code #49757
Comments
I expiriencing similar issue with supabase - https://github.com/orgs/supabase/discussions/18086 |
any updates on how to solve this? I have to use |
Please try to research first (I mean updates alrady exist) |
This is super annoying. Basically I need to have two API handlers because I want to get cookies on the server, and on the client. I did the same workaround using |
Adding an additional scenario. This happened to me when using the
I am using the app directory as opposed to pages, but this call was in a directory It was really odd that it was telling me it's not supported in the I assume there is some sort of check to see if you are using it in the actual |
Hi @christopher-caldwell, I'm having the exact same situation as you. Hopefully someone from the team reaches out soon. |
@ezeamin Here is my work around for now: // A file at some path outside of the `app/` dir
const SomeComponent = async (props) => {
const { cookies } = await import('next/headers')
const cookieManager = cookies()
return (
<div>
{cookieManager.get('cookieName')?.value ?? 'Nope'}
</div>
)
} |
Guys I don't understand what's the problem to use This solution in client components to get cookies export function getCookie(name: string) {
if (typeof document === "undefined") return
const value = "; " + document.cookie
const decodedValue = decodeURIComponent(value)
const parts = decodedValue.split("; " + name + "=")
if (parts.length === 2) {
return parts.pop()?.split(";").shift()
}
} And this solution in server components to get cookies import { cookies } from "next/headers"
cookie.get('someCookieName').value |
For me, the issue is not how to access cookies. It's that doing so outside of the actual |
Of course because you try to get cookies outside of app I don't understand use case of using |
Using app router, and having files outside of the actual app directory are 2 different things. You can use the cookies function anywhere, but there is (I believe) incorrect check on where you're accessing them. My basis for this is because the error message says that it's not supported in the pages router. Also it works if you require it, or import it in the component. Your feature code does not need to be in the app directory to use the app router. |
'use client'; I tracked and fouund having to use use client in my // import { usePathname } from 'next/navigation';
'use client';
import DashboardHeader from "@/components/layout/header";
import Sidebar from "@/components/layout/sidebar";
import type { Metadata } from "next";
import { SidebarOne } from '@/components/admin-panel/sidebar';
import { redirect } from 'next/navigation';
import { getAuth } from '@/app/features/auth/queries/get-auth'; // Lucia* So, I went for files around the feature and removed things like useRouter for Link tags where necessary. Got fixed. |
Nice fix by killing SSR feature of Next.js |
In my case, I'm using Nx monorepo, and all cookie-related code lives under the same library. The issue is that this library exports a single 'barrel' file, which exports both client and server code. One of these files imports the Right now, I'm also using the |
Same as tiago here, using a turbo monorepo and splitting auth into its own package, gonna follow the same approach everyone else is using until it's fixed 🤲🤲 |
I'm experiencing the same issue. |
I've encountered this issue when using |
this gives error in production if used outside pages
|
In my case I had a util outside of |
Now with next15 the require('next/headers') approach will not always work because we need to add an await. For example in my code below:
Does anyone have a way to get around this next/header import problem, but still maintain asynchronicity? |
add "use server" on top of your actions with next/headers imports |
@mobeigi did you find a solution, i do have a utils file inside src/server/lib/action.ts and it complains about it not being used inside app |
Had the same issue, |
The |
Verify canary release
Provide environment information
Operating System: Platform: linux Arch: x64 Version: #1 SMP Fri Jan 27 02:56:13 UTC 2023 Binaries: Node: 18.13.0 npm: 8.19.3 Yarn: 1.22.18 pnpm: 7.32.3 Relevant packages: next: 13.4.3-canary.0 eslint-config-next: 13.4.2 react: 18.2.0 react-dom: 18.2.0 typescript: 5.0.4
Which area(s) of Next.js are affected? (leave empty if unsure)
App directory (appDir: true), SWC transpilation
Link to the code that reproduces this issue
https://github.com/jeengbe/nextjs-next-headers-issue
To Reproduce
pnpm dev
http://localhost
git checkout HEAD~1
Describe the Bug
Expected Behavior
Because of how the
Environment
component works (./environment/amphibious.tsx
), it is only possible to reach the file that includesnext/headers
on the server:This is also understood by webpack, so the server code never makes it into the client bundle:
Note that
if(typeof window === "undefined") { ... }
was replaced withif (false) { }
.Since webpack's dead branch elimination is smart enough to eliminate this code, it should be legal to dynamically require modules that import
next/headers
from Client Components as long as we know that the code is only reachable though branches webpack considers dead. I can't exactly find how webpack does this, but the greater dead branch parity SWC gets with webpack, the better.Which browser are you using? (if relevant)
No response
How are you deploying your application? (if relevant)
No response
The text was updated successfully, but these errors were encountered: