<title>
, <meta>
, <link>
)被渲染在 <body>
中而不是 <head>
中。 社区中对这个改动意见很大,但是官方暂时没有修复的打算。
<head>
中的元数据临时解决方法:
在 next.config.ts
中添加以下配置:
const nextCOnfig= { // 强制所有用户代理接收阻塞式元数据 htmlLimitedBots: /.*/, // 这个正则表达式匹配所有用户代理 // 其他配置... };
/googlebot|bingbot|baiduspider/
相关讨论在: https://github.com/vercel/next.js/issues/79313#issuecomment-2892288965
官方文档相关说明: https://nextjs.org/docs/app/api-reference/functions/generate-metadata#streaming-metadata
--
在我的佛经项目中,添加此配置后:
PS. 分享一个 Lighthouse 全满分的小彩蛋
PS 2. 最近用 Next.js 在做一个 AI 阅读佛经的网站,欢迎大家体验:
]]>问了 DeepSeek ,Google 也查了查,都没找到能获取实际加载进度的解决方案。
]]>来了 V 站,见过吐槽 Next.js 的观点有以下几个:
这是最令我奇怪的一个点,服务端能用 hooks 还得了,是想让服务端有副作用吗。
这里贴一句 V 站之前看到的评论:“在客户端渲染时,一般通过 useEffect
来获取数据。而在服务端渲染时,我们无法使用 useEffect
,这使得在服务端请求数据(以及其他异步操作)成为了一个问题”。
有没有一种可能,服务端组件直接 fetch 就能获取数据了。
事实上,Next.js 可以自动判断当前组件是不是客户端组件,但这对开发者来说不是显性的,use client 可以更好告诉你,这个组件是客户端组件。
(另外,有人说 Astro 的 client:load 好的,我就纳闷了,这和 use client 有啥区别......)
不过 Astro 的选择性水和我觉得挺好的,这点比 Next.js 强很多。
直接说可能不明白,既然 Next.js 能做到自动判断当前组件是不是客户端组件,那直接标记这个组件是客户端组件不就行了,那假设我有个组件 C:
function C() { return <div>C 组件</div> }
很明显 C 是一个服务端组件,至少可以当成一个服务端组件,它没有任何副作用,你还有个组件 A (服务端组件)和组件 B (客户端组件),两个组件都用了 C 组件,Next.js 怎么判断 C 组件该如何渲染?你第一次接触 C 组件,要求你从服务端获取数据,你是写 RSC 还是写 useState 和 useEffect ?
有没有一种可能,Next.js 的 page router 的 getServerSideProps 函数和 load 一样。
要不你发明一个服务器,能把你浏览器里的元素绑定上这个事件。
想要绑定客户端事件,老老实实写 use client 。
欢迎大家补充。
我认为 Next.js 最恶心的地方其实是在于团队十分固执,你必须遵照它的写法,最明显的例子就是之前版本的 Next.js 重写了 fetch ,默认 force-cache 。
而且 Next.js 直接使用 React 的最新代码,稳定性有待考察(这点可以参照 React19 Suspense 变化,因为这个 React19 延迟发布来着)。
另外,Next.js 本身性能极其之差,团队甚至没有意识到这点,或者意识到但是不愿去做任何优化,只是一味地优化开发速度。
最后,Next.js 的使用场景可以说几乎没有,为了首屏加载速度,不好意思 Next.js 太慢了,见 https://github.com/eknkc/ssr-benchmark 。你说为了 seo ,个人项目我能理解,公司项目不如花点钱排名竞价,比用 Next.js 成本小很多(仅限国内)。想了想也就个人博客、交互性少的页面能用一下了。
]]>nextjs 和 golang(或者其他语言也行)后端分别是两个 docker ,由 nginx 分发,/api/请求转发到后端上,其它请求转发给 nextjs 。需要做 SSR 的部分,由 nextjs 使用内部通信访问后端。
怎么说呢,就是相当于搞一个高性能后端的同时,还能用到 nextjs 的特性,比如 SSR 等。
]]>(有一种“不如 PHP”的感觉,果然还是 PHP 天下第一吗?)
尽快升级到最新版本。
如果无法短期内升级,拦截一切 HTTP Header 包含 x-middleware-subrequest
的请求。
受影响的版本:
>= 11.1.4, <= 13.5.6 >= 14.0, < 14.2.25 >= 15.0, < 15.2.3
官方 Patch 安全版本:
14.2.25 15.2.3
扫了一眼解决方案,这个给中间件的白名单请求头现在改成了一个随机的 8 字节 ID ,标识中间件子请求的来源,被添加到请求头 x-middleware-subrequest-id 。如果请求头中的 x-middleware-subrequest-id 与全局存储的 ID 不匹配,则删除 x-middleware-subrequest 请求头。此更改确保了只有来自相同会话的子请求才会被视为中间件子请求。 https://github.com/vercel/next.js/commit/52a078da3884efe6501613c7834a3d02a91676d2
]]>这之中有一个动态路由的参数中带有中文。
此时,当使用 pnpm dev
启动时,generateStaticParams()
中返回的路径不会被编码成 URL 格式。
此时访问的路径被编码了,报错显示在 generateStaticParams()
中找不到此路径。
当为 generateStaticParams()
中的返回编码时,pnpm dev
正常了,而 pnpm build
时无法正常工作。
因为 pnpm build
时 generateStaticParams()
的返回会被编码,手动编码的结果是编码了两次,报错显示在 generateStaticParams()
中找不到此路径。
问:可以通过简单的配置将主页设置为 home.tsx 吗?
AI:不,你不能通过简单的配置来将主页设置为 home.tsx
并让它对应根路由 /
。Next.js 的 app
目录结构依赖于特定的文件名约定,其中 page.tsx
(或 .js
, .jsx
) 用于定义路由。
以下是原因以及替代方案:
为什么不能直接更改文件名:
app
目录,它期望在路由目录中找到一个名为 page.tsx
(或其他支持的文件扩展名) 的文件来渲染该路由。 如果它找不到 page.tsx
,它将不会渲染该路由。page.tsx
文件来确定页面的入口点。重命名该文件会破坏这个过程。……(以下省略)
是真的不能变吗?不会吧?有点搞笑了吧?约定优于配置我理解,但是现在配置都没有啊?!
Next.js 13 之前还是 index.js ,现在变成 page ,有什么意义吗?我不理解……
]]>revalidatePath
失效的问题,一个可能的原因是你的 path 包含中文字符。 ]]>revalidatePath
的稳定性依旧无法保证,太令人失望了!官方对于 bug 修复的积极性貌似不高(还是说 bug 实在太多了来不及修?),反而一个劲地推出新的功能,这种做法太不负责任了。无法想象这是一个拥有 129k start 的作品。 ]]>这是报错代码:
Fetching tools from: https://your-vercel-app-url.vercel.app Full API URL: https://your-vercel-app-url.vercel.app/api/sites API Response Status: 404 Error fetching tools: Error: Failed to fetch tools: 404 Not Found at c (.next/server/app/page.js:1:28997) at async f (.next/server/app/page.js:1:29346) Finalizing page optimization ... Collecting build traces ...
我在 vercel 的环境变量设置中新增了: key:NEXT_PUBLIC_BASE_URL Value: https://linkary-puce.vercel.app
Environments 勾选了 Production 和 Preview
最后在 Redeploy 的时候选择了 Production ,然后总是报错,看起来是环境变量没有生效; 但是我在代码中强制使用 vercel 的 URL ,就能正常跑下去。
page.tsx 代码:
async function getTools(): Promise<ToolsResponse> { try { const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || "https://your-vercel-app-url.vercel.app"; console.log("Fetching tools from:", baseUrl); console.log("Full API URL:", ${baseUrl}/api/sites
);
const res = await fetch(`${baseUrl}/api/sites`, { next: { revalidate: 60 }, headers: { "Content-Type": "application/json", }, });
]]>✓ Compiled /admin/usercenter in 33.4s (8687 modules)
是不是有个什么按需加载编译?不然这一个页面就 30 几秒,还怎么玩儿啊。
]]><Image alt="营业执照" className="min-w-32 rounded-md object-cover" // aspect-square height="4" src={customer.businessLicense} width="32" />
因为部署环境需要通过一台代理服务器请求公网 cdn ,请问如何配置 nextjs 使得能够通过代理服务器获取图片资源,请有经验的 xd 帮忙解答下,感谢!
]]> 浏览器:POST http://localhost:3000/api/proxy net::ERR_CONNECTION_REFUSED 改成 fetch('https://weixx.com:3000/api/proxy')并没有解决,应该怎么做呢,求求求指教
]]>域名本来是倾向在 cf 注册,但 cf 没有 ai 域名,最后是在 namesilo 上注册的,花了四百多 RMB ,当时也是一时头脑发热🥲
没想到这一拖就到年底了
网站地址 https://image-to-text.ai/ ,算是一个比较完整的站点了,主要的功能已完成,后续还需要进行一些优化。
下面分享一下这个站点用到的东西,希望对你有帮助
NextJS 相关:app router 、server actions 、shadcn 、prisma
大概这些,大家还有什么想问的留言吧,我看到会回复的。
]]>这是一个在线生成网站 Favicon 图标的工具,可以从文字生成、从 Emoji 生成、图片生成。如果有人用的话再看看添加啥新功能吧。
技术栈:NextJS 、Tailwindcss 、Shadcn 、Vercel
]]>不过前端骚操作还是需要点功力,复杂点交互还是有点吃力。
UI 排版总是觉得细节不是很到位。
下面是练手的工具站
]]>感觉 Next.js 优势就是 SSR ,开发企业官网、静态页面啥的还不错,但是做一个中后台管理系统,不如直接用 vite +Antd+Spring Boot 来的快
想咨询一下大家一般都用在什么项目上呢?
]]>高考作文评分 AI 作文估分工具,你的作文阅卷老师. 仅供娱乐😁
]]>对于后端比较复杂的情况
目前采用的做法是借鉴 MVC 的三层架构
将后端分为了 Service 层和 Dao 层 🤔
不过不太确定🐶
五一的时候借鉴了一些 Github 开源的项目
并没有找到一些比较好的实践例子
大家有什么比较好的 idea 吗?🙏
下面用 kv 做个示例:
import { kv } from "@vercel/kv"; export async function GET() { let page1 = await kv.get("page:1"); setTimeout(() => { kv.incr("page-visit:1"); }, 2000); return Response.json({ data: page1 }); } export const runtime = "edge"; // 尝试过 nodejs 效果一样 export const fetchCache = "force-no-store";
其中 incr 在本地可以正常执行,但在 Vercel 上部署时会发生:
我的猜测是:本地 node 是守护进程,所以计时器不会被卸载掉,incr 正常执行;而 Vercel 上是 Serverless Function ,10ms 内 CPU 分配还在就会执行 incr ,2000ms 时 CPU 已经不分配了就不会执行 incr
我只是想薅 Vercel 的羊毛,请教大家如何才能做到延迟调用
]]>假如我要写一个用户的操作,首先可以有基础用户的增删改查/api/user/route.js 写 get post put 这种, 如果想要在用户里面增加一些统计,或者 getById listByType disableUser 这种关于用户的其他操作以行文改如何定义呢,难道每一个方法都要写一个路径吗?有没有什么方式可以实现呢?
]]>如果不改成用 use client ,还是 use server 的 action ,怎么重置 form 呢?
]]>我不太会写代码,正在学写代码,还有 SEO 。有没有大佬能给点代码和 SEO 的建议。
]]>我有一个现成的使用 HTTP-Only Cookies 方式校验的后端网关,后面有几个微服务,后端拦截器会校验的每一次请求的携带的 Cookies ,不合法返回 401 错误。
问题来了,Next.js 怎么跟这样的后端交互呢?
1.如果全部都用 Client Component ,发请求什么的还是用 useEffect ,是不是就是跟 React 一样了?
2.如果用 Server Component 怎么办呢? Server Component 是 Node.js 环境,感觉估计处理不了这种情况。
3.如果使用 Server Component ,再使用 Next.js 自带的 API Route ,写一个登录 API ,把登录逻辑再写一遍,设置 HTTP-Only Cookies 这一步放到 Next.js 是否可行?感觉这样影响了现成的后端服务独立性。
4.如果后端大改,改成 JWT 验证,但是 Login 组件是个 Client Component ,其他的 Server Component 怎么拿到 JWT 呢?
感觉有点迷,有最好的方法吗?
]]>首屏上需要显示最近一周的统计数据,可是“最近一周”是跟用户时区相关的概念,没办法在 RSC 里预先获取数据,于是翻车了。 项目开始的时候我宣传了半天 RSC 的优势,有点骑虎难下,而且 RSC 和 server action 用上后开发和用户体验都好了不少。首屏实在不想退回到 useEffect 。
现在能想到的一个办法是在 middleware 里返回给用户一个脚本,把 timezone 写到 cookie 里,再重定向到首页,之后按照 cookie 做 ssr 。
本来信心满满的用上 next14 ,server action 把 API 都淘汰掉,还挺得意的。这样一个平常的问题搞了我 2 天,郁闷死了。
]]>类型提示: 对于 http 接口调用提供类型提示
类型安全: 解决序列化导致非基础类型 (比对 Date 类型) 丢失的问题
本地/http 调用自适应: 只需要编写本地函数, 无需编写 http 接口. 根据渲染模式决定直接/http 调用.
https://github.com/d342784178/next-sRpc
目前我都是导出静态站点自己部署,不用 server actions 这些服务端运行的功能。
请教大家如果用了服务端功能,自己部署还可行么,他这个自带的服务器性能如何?
]]>前提:
为了更多的自由度(比如监控等等),我打算使用自定义 server。 但在查看文档之后发现只有默认打包模式下的自定义 server 的示例。
standalone 模式下用自定义的 server.js 替换 .next\standalone\server.js 会导致报错。
请教下有没有遇到同样问题的怎么解决
]]>