核心修改内容
- 隐藏导航栏「探索」功能(图标 + 文字按钮);
- 将默认 Dify Logo 替换为自定义 FDAI Logo(PNG 格式)。
(一)隐藏「探索」功能完整过程
1. 定位目标组件
探索功能对应的组件文件路径:web/app/components/header/explore-nav/index.tsx(组件名:ExploreNav),该组件被嵌套在 Header 组件中渲染,无需修改布局文件 。
Dify Web 前端二次开发涉及隐藏导航栏探索功能及替换自定义 Logo。主要修改 ExploreNav 组件返回空片段以彻底隐藏入口,更新 DifyLogo 组件配置指向本地 PNG 资源。常见问题包括语法错误导致 ChunkLoadError、缓存未清理导致的编译失败、以及图片路径大小写不匹配。解决方案涵盖删除.next 缓存目录、修正代码结构及确认资源路径一致性。
探索功能对应的组件文件路径:web/app/components/header/explore-nav/index.tsx(组件名:ExploreNav),该组件被嵌套在 Header 组件中渲染,无需修改布局文件 。
app/(commonlayout)/layout.tsx{ activated ? <RiPlanetFill /> : <RiPlanetLine /> },并移除对应图标导入;ExploreNav 组件的返回值改为 return null,注释原有 Link 渲染代码;Uncaught SyntaxError(注释代码时残留未闭合的引号 / 括号,导致语法不完整)、ChunkLoadError(编译缓存异常),服务无法正常加载。ExploreNav 组件代码,保留必要变量定义,返回 <></> 空片段,同时清理图标、Link 等无用导入;核心修改后代码:tsx
'use client'
import { useTranslation } from 'react-i18next'
import { useSelectedLayoutSegment } from 'next/navigation'
import classNames from '@/utils/classnames'
type ExploreNavProps = {
className?: string
}
const ExploreNav = ({ className }: ExploreNavProps) => {
const { t } = useTranslation()
const selectedSegment = useSelectedLayoutSegment()
const activated = selectedSegment === 'explore'
return <></> // 空片段不渲染任何内容
}
export default ExploreNav
public/logo/,文件命名为 FDAI.png;public 是 Next.js 默认静态资源目录,public/logo/FDAI.png 可通过 /logo/FDAI.png 直接访问。Logo 对应的组件文件路径:web/app/components/header/logo/index.tsx(组件名:DifyLogo)。
alt 文本为 FDAI logo;核心修改后代码:tsx
'use client'
import type { FC } from 'react'
import classNames from '@/utils/classnames'
import useTheme from '@/hooks/use-theme'
import { basePath } from '@/utils/var'
export type LogoStyle = 'default' | 'monochromeWhite'
export type LogoSize = 'large' | 'medium' | 'small'
// 替换为自定义 Logo 路径
export const logoPathMap: Record<LogoStyle, string> = {
default: '/logo/FDAI.png',
monochromeWhite: '/logo/FDAI.png', // 无白色版则复用同一文件
}
// 保留原尺寸(适配 48x22 比例)
export const logoSizeMap: Record<LogoSize, string> = {
large: 'w-16 h-7',
medium: 'w-12 h-[22px]',
small: 'w-9 h-4',
}
type DifyLogoProps = {
style?: LogoStyle
size?: LogoSize
className?: string
}
const DifyLogo: FC<DifyLogoProps> = ({ style, size = 'medium', className }) => {
const { theme } = useTheme()
const themedStyle = (theme === 'dark' && style === 'default') ? 'monochromeWhite' : style
return (
<img
src={`${basePath}${logoPathMap[themedStyle]}`}
className={classNames('block object-contain', logoSizeMap[size], className)}
alt='FDAI logo' // 更新 Logo 描述
/>
)
}
export default DifyLogo
web/.next 编译缓存目录 → 重新启动服务(npm run dev);ExploreNav 组件;ExploreNav 组件返回 <></> 空片段,不渲染任何内容,彻底隐藏组件。null 后报 Uncaught SyntaxError
null,同时清理图标、Link 等无用导入,避免语法残留。ChunkLoadError: Loading chunk app/layout failed
web/.next 缓存目录,重新启动服务,清除异常缓存。fdai.png 与 FDAI.png 区分大小写);public/logo/FDAI.png 文件存在,且代码中 logoPathMap 配置的路径与文件名完全一致(含大小写)。logoSizeMap 中的 w-xxx h-xxx 数值,保持宽高比与自定义 PNG 一致(例如 medium: 'w-14 h-[24px]')。preloaded with link preload was not used within a few seconds 警告
layout.tsx 中预加载标签的属性配置。MouseEvent.mozInputSource is deprecated 警告
web/.next 缓存目录,重启服务时避免残留旧编译文件。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online