You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在子路径应用中配置Next.js Link组件完整路径的方法

解决Next.js monorepo中跨应用Link跳转路径错误的问题

针对你在Turbo+Next.js monorepo里遇到的共享UI组件中Link自动添加当前应用子路径的问题,不需要被迫使用会重载页面的<a>标签,有几种更优雅的客户端导航方案:

1. 使用带域名的绝对路径(推荐)

通过环境变量动态拼接目标域名和路径,让Next.js的Link识别这是跨应用的绝对路径,避免自动添加当前应用的basePath:

import Link from 'next/link';

export const SignoutLink = () => {
  // 在各应用的.env文件中配置NEXT_PUBLIC_APP_DOMAIN(比如http://localhost:3000)
  const signoutUrl = `${process.env.NEXT_PUBLIC_APP_DOMAIN}/accounts/auth/signout`;
  return <Link href={signoutUrl}>退出登录</Link>;
};

这种方式保持了Link的客户端导航特性,不会触发页面重载。

2. 手动调用Router的push方法并禁用basePath

利用next/router的push方法,通过配置项跳过当前应用的basePath自动拼接:

import { useRouter } from 'next/router';

export const SignoutLink = () => {
  const router = useRouter();

  const handleSignoutNavigate = () => {
    // 第三个参数设置basePath: false,绕过当前应用的前缀
    router.push('/accounts/auth/signout', undefined, { basePath: false });
  };

  return (
    <span onClick={handleSignoutNavigate} style={{ cursor: 'pointer' }}>
      退出登录
    </span>
  );
};

这种方式同样是客户端导航,且不需要硬编码域名,适合同域名下的跨应用跳转场景。

3. 特殊场景下使用标签

如果你的跨应用跳转涉及不同域名,或者完全不需要客户端导航的特性,再考虑使用标准<a>标签:

<a href="/accounts/auth/signout">退出登录</a>

这种方式会触发页面重载,仅作为备选方案。

内容的提问来源于stack exchange,提问作者Yanick Rochon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:15:42