# react-next-click-source-code **Repository Path**: dcfeawf/react-next-click-source-code ## Basic Information - **Project Name**: react-next-click-source-code - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-17 - **Last Updated**: 2025-11-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Next.js 点击跳转源码 在 Next.js 开发环境中,按住 **Shift 键**点击页面组件,自动在编辑器中打开对应的源码文件。 ## 功能特性 - ✅ 按住 Shift + 点击组件即可跳转到源码 - ✅ 自动为所有 JSX 元素注入文件路径信息 - ✅ 仅在开发环境生效,不影响生产构建 - ✅ 零配置,开箱即用 ## 使用方法 1. **安装依赖** ```bash npm install ``` 2. **启动开发服务器** ```bash npm run dev ``` 3. **使用功能** - 在浏览器中打开页面 - 按住 **Shift 键** - 点击任意组件 - 编辑器会自动打开对应的源码文件 ## 实现思路 ### 1. 编译时注入路径信息(Babel 插件) 通过自定义 Babel 插件 `babel-plugin-inject-component-path.js`,在编译时为所有 JSX 元素自动注入 `data-component-path` 属性,属性值为当前文件的相对路径。 ```javascript // 编译前
Hello
// 编译后(开发环境)
Hello
``` ### 2. 客户端监听点击事件 `ClickToSource` 组件在客户端监听全局点击事件: - 检测是否按住 Shift 键 - 向上查找 DOM 树,找到最近的带有 `data-component-path` 的元素 - 发送请求到 API Route ### 3. 服务端打开编辑器 API Route (`/api/open-in-editor`) 接收文件路径: - 解析相对路径为绝对路径 - 使用 `launch-editor` 包在编辑器中打开文件 - 支持 VS Code、WebStorm、Sublime 等主流编辑器 ## 技术栈 - **Next.js 16** - React 框架 - **Babel** - 代码转换,注入属性 - **launch-editor** - 打开编辑器 ## 项目结构 ``` . ├── app/ │ ├── api/ │ │ └── open-in-editor/ │ │ └── route.ts # API 路由,处理打开编辑器请求 │ ├── components/ │ │ ├── ClickToSource.tsx # 客户端点击监听组件 │ │ ├── TestButton.tsx # 测试组件 │ │ └── TestCard.tsx # 测试组件 │ ├── layout.tsx # 根布局,注入 ClickToSource │ └── page.tsx # 首页 ├── babel-plugin-inject-component-path.js # Babel 插件 ├── babel.config.js # Babel 配置 └── package.json ``` ## 核心文件说明 ### `babel-plugin-inject-component-path.js` Babel 插件,在编译时为 JSX 元素注入 `data-component-path` 属性。 ### `app/components/ClickToSource.tsx` 客户端组件,监听 Shift+点击事件,查找组件路径并发送请求。 ### `app/api/open-in-editor/route.ts` Next.js API Route,接收文件路径并在编辑器中打开。 ## 注意事项 - 仅在开发环境(`NODE_ENV=development`)生效 - 需要配置编辑器环境变量(VS Code、WebStorm 等会自动检测) - 确保 Next.js 使用 Babel 而不是 SWC(已通过 `babel.config.js` 配置) ## 开发 ```bash # 开发模式 npm run dev # 构建 npm run build # 生产模式 npm start ``` ## License MIT