重度使用Cursor的你,必看!最强Cursor规则和最佳配置实践大揭秘!

项目开发中的实用小技巧

最近我一直在忙项目,对我来说,赚钱是最重要的!今天想和大家聊聊一些目前特别实用的内容。

我会记录一些笔记,分享生活中的点滴和经验。

在现在这种环境下,前端开发者可以通过深入技术、扩展技能、探索新领域和培养产品思维来找到新的机会。

Cursor 规则是什么呢?

Cursor 规则,简单来说就是为 Cursor 制定一些规范,帮助约束AI生成的代码。

当某条规则被触发时,它的内容会被自动加入到提示词中,让AI在自动补全、生成代码、重构或修复错误时都能遵循这些规定。
Cursor 规则分为两种:

  • 全局规则(User Rules):适用于所有项目的通用规则。
  • 项目规则(Project Rules):存放在项目目录下的 .cursor/rules 中,只用于限制当前项目。
重度使用Cursor的你,必看!最强Cursor规则和最佳配置实践大揭秘!

比如你可以输入 /Generate Cursor Rules 来让系统自动生成规则,

重度使用Cursor的你,必看!最强Cursor规则和最佳配置实践大揭秘!

这样就能迅速生成相应的规则了。

Vue 3 + TypeScript 项目的规则

项目结构

src/
├── api/            # API configuration and service calls
├── assets/         # Static assets (images, fonts, etc.)
├── components/     # Reusable components
├── config/         # Global configurations
├── constants/      # System constants
├── directives/     # Custom directives
├── hooks/          # Custom composition hooks
├── layouts/        # Layout components
├── pages/          # Page views
├── router/         # Vue Router configuration
├── store/          # Pinia state management
├── style/          # Global styles and variables
├── types/          # TypeScript types and interfaces
└── utils/          # Utility functions

编码标准
组件结构

  • 使用 语法的组合式 API
  • 组件名称用 PascalCase(例如:UserProfile.vue
  • 采用单文件组件(SFC)结构
  • 按类型组织导入(Vue核心、第三方库、内部导入)

// Vue core imports
import { ref, computed, onMounted } from 'vue'

// Third-party libraries
import { storeToRefs } from 'pinia'

// Internal imports
import { useUserStore } from '@/store/user'
import type { User } from '@/types/user'

// Props definition
const props = defineProps()

// Component logic



  



/* Component styles */

TypeScript 使用

  • 为所有数据结构定义合适的接口和类型
  • 为函数参数和返回值添加类型注释
  • 利用 TypeScript 的高级特性(泛型、工具类型等)
  • 尽量避免使用 any 类型;必要时请使用合适的类型或 unknown
// Good practice
interface UserData {
  id: string;
  name: string;
  email: string;
  role: 'admin' | 'user' | 'guest';
}

// Function with proper typing
const fetchUser = async (id: string): Promise => {
  // Implementation
}

组合钩子

  • 自定义钩子命名时加上 use 前缀(例如:useUserList
  • 保持钩子专注于单一职责
  • 返回响应式数据以维持消费组件的响应性
  • 用 JSDoc 注释记录钩子的参数和返回值
/**
 * Hook for managing user data
 * @param initialFilter - Initial filter criteria
 * @returns User data and operations
 */
export function useUsers(initialFilter?: UserFilter) {
  const users = ref([])
  const isLoading = ref(false)
  const error = ref(null)

  // Implementation

  return {
    users,
    isLoading,
    error,
    fetchUsers,
    createUser,
    updateUser,
    deleteUser
  }
}

状态管理(Pinia)

  • 为不同领域创建模块化的 store
  • 使用组合式 API 风格的 defineStore
  • 定义合适的状态类型
  • 使用 actions 进行异步操作
  • 使用 getters 获取派生状态
export const useUserStore = defineStore('user', () => {
  // State
  const users = ref([])
  const currentUser = ref(null)
  const isLoading = ref(false)

  // Getters
  const isAdmin = computed(() => 
    currentUser.value?.role === 'admin'
  )

  // Actions
  async function fetchUsers() {
    isLoading.value = true
    try {
      users.value = await userApi.getAll()
    } catch (error) {
      console.error('Failed to fetch users:', error)
    } finally {
      isLoading.value = false
    }
  }

  return {
    users,
    currentUser,
    isLoading,
    isAdmin,
    fetchUsers
  }
})

API 调用

  • 按领域/实体组织 API 调用
  • 使用 axios 或 fetch 并做好错误处理
  • 定义请求和响应的类型
  • 实现拦截器以处理常见操作(认证、错误处理)
 // userApi.ts
import axios from 'axios'
import type { User, CreateUserDTO } from '@/types/user'

const API_URL = '/api/users'

/**
 * Fetches all users
 * @returns List of users
 */
export async function getAll(): Promise {
  const response = await axios.get(API_URL)
  return response.data
}

/**
 * Creates a new user
 * @param userData - User data to create
 * @returns Created user
 */
export async function create(userData: CreateUserDTO): Promise {
  const response = await axios.post(API_URL, userData)
  return response.data
}

路由

  • 使用命名路由
  • 为路由组件实现懒加载
  • 使用路由守卫进行认证/授权
  • 按功能或领域对路由进行分组
import { createRouter, createWebHistory } from 'vue-router'

const routes = [
  {
    path: '/',
    name: 'Home',
    component: () => import('@/pages/Home.vue')
  },
  {
    path: '/users',
    name: 'UserList',
    component: () => import('@/pages/users/UserList.vue'),
    meta: { requiresAuth: true }
  },
  {
    path: '/users/:id',
    name: 'UserDetail',
    component: () => import('@/pages/users/UserDetail.vue'),
    props: true,
    meta: { requiresAuth: true }
  }
]

样式指南

  • 使用 Less 进行 CSS 预处理
  • 遵循 BEM 方法论命名类
  • 使用变量管理颜色、间距和排版
  • 除非必要,优先使用局部样式
// variables.less
@primary-color: #1890ff;
@text-color: #333;
@spacing-base: 8px;

// Component styles
.user {
  &__header {
    margin-bottom: @spacing-base * 2;
    color: @text-color;
  }

  &__content {
    padding: @spacing-base * 2;
  }
}

性能优化

  • 使用 computed 属性来获取派生值
  • 使用 v-show 处理频繁切换,使用 v-if 进行条件渲染
  • 实现 defineAsyncComponent 进行代码分割
  • 对需要保持状态的组件使用 keep-alive
  • 为 v-for 循环添加唯一值的 key 属性

错误处理

  • 实现全局错误处理
  • 对异步操作使用 try/catch
  • 展示用户友好的错误消息
  • 记录错误以便调试

测试

  • 为组件和钩子编写单元测试
  • 为关键用户流程编写集成测试
  • 使用 Vitest 或 Jest 进行单元测试
  • 使用 Testing Library 或 Cypress 进行组件/e2e 测试

ThreeJS 集成

  • 将 Three.js 逻辑分离到专用钩子/服务中
  • 当组件卸载时清理 Three.js 资源
  • 使用 ref 访问 DOM 元素以进行画布挂载
  • 优化渲染周期和资源使用
export function useThreeJsScene() {
  const canvasRef = ref(null)
  let scene: THREE.Scene | null = null
  let renderer: THREE.WebGLRenderer | null = null
  let camera: THREE.PerspectiveCamera | null = null
  
  onMounted(() => {
    if (!canvasRef.value) return
    
    // Initialize Three.js scene
    scene = new THREE.Scene()
    renderer = new THREE.WebGLRenderer({ canvas: canvasRef.value })
    camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000)
    
    // Setup scene
    
    // Start animation loop
    animate()
  })
  
  onUnmounted(() => {
    // Clean up resources
    if (renderer) {
      renderer.dispose()
    }
    // Dispose of geometries, materials, textures, etc.
  })
  
  // Animation loop
  function animate() {
    if (!scene || !camera || !renderer) return
    
    requestAnimationFrame(animate)
    // Update scene
    renderer.render(scene, camera)
  }
  
  return {
    canvasRef,
    // Expose methods to manipulate the scene
  }
}

文档

  • 为函数、钩子和组件添加 JSDoc 注释
  • 记录组件的 props、事件和插槽
  • 保持 README 和其他文档的更新
  • 记录复杂的业务逻辑和架构决策

全局规则

轻松上手 Cursor 的用户规则和 MCP 概念

你知道吗?在 Cursor 中,用户规则可以通过设置来配置,适用于所有项目,比如你想强制输出中文或者制定一些通用的编码规范。这些用户规则是全局性的,可以在任何地方的 Cursor 环境中使用。

不过要注意,这些规则以纯文本的形式定义,不支持 .mdc 格式。一般来说,它们用于设定一些全局偏好,比如你希望 AI 回复时的语言风格、语气,或者是你个人常用的编码习惯。

说到 .mdc 文件格式,它其实就是一种轻量级的 Markdown 文件格式。

如果你想设置项目规则,可以在 <a href="https://link.juejin.cn/?target=">- - ‌项目规则(Project Rules) ‌:存储在.cursor 中找到相关信息,这些规则仅限于当前项目生效,并且可以根据文件后缀、路径等条件来触发,比如说在 .tsx 文件中应用 React 的规范。

Cursor 支持四种不同的规则类型:

  • Always:始终应用这个规则。
  • Auto Attached:当匹配特定模式的文件被引用时,自动附加这个规则。
  • Agent Requested:根据 AI 代理的判断来决定是否应用规则,不过这需要你提供规则说明。
  • Manual:只有在明确提示时才会附加这个规则。

如果你想手动调用规则,可以使用对应的指令;想让它自动触发,可以用另一种指令;如果希望规则始终生效,使用相应的命令;而如果希望 AI 来决定是否使用,这也是可以的。

在 mdc 文件里,你可以根据不同的最佳实践配置各种编码规范,比如依据个人偏好、行业标准、官方建议等。

为了让 Cursor 的规则发挥最大效果,编写规则时要简洁明确。这里有些小建议:

  • 保持规则简洁明了:控制在 300 到 500 行之间是个不错的选择。
  • 拆分复杂任务:将复杂的任务拆分成多个小规则,这样更容易管理。
  • 提供示例和代码片段:在适当的情况下,提供具体示例或引用的文件会更有帮助。
  • 在提示中引用规则:在需要时,可以在聊天提示中提到特定规则。
  • 尽量清晰:避免模糊不清的指导,写规则就像写内部文档一样。
  • 及时更新:如果你在对话中反复强调某个点,可以把它写成规则。
  • 团队合作:团队内部共享同一份规则,定期讨论和更新,确保与当前的最佳实践一致。

举个例子,假如你在做一个 Vue 3 项目,项目会用到 Vue Router、TypeScript、Three.js 和 Pinia,特别适合中大型管理类项目。你可以通过脚手架搭建,支持现代前端开发流程。

在组件规范方面,以下是一些基础规则:

  • 使用 Composition API:在组件中使用 Vue 3 的 Composition API 来组织逻辑。
  • 组件命名使用 PascalCase:所有组件名称应该用 PascalCase 格式,比如 MyComponent。
  • Props 定义要清晰:使用 TypeScript 来定义组件的 props。
  • 事件要清晰:使用描述性的事件名称,确保一目了然。
  • 方法备注:为每个方法添加注释,说明用途。
  • 创建组件时使用预处理器:确保语法清晰。

当然,其他技术栈也是同样道理,最终的配置还是要看个人的习惯和最佳实践。

接下来,聊聊 Cursor 的 MCP 概念吧!

MCP 是 Cursor 中集成的模型上下文协议,旨在让大语言模型和外部工具之间无缝互动。通过这个协议,Cursor 可以打破传统的代码补全限制,直接调用本地和云端工具,完成更复杂的操作,比如文件转换、数据抓取和版本控制。

MCP 的核心价值在于它的双向连接机制:

  • 支持 LLM 主动调用本地开发工具(如 Git、Node.js 模块)和第三方 API(如 Replicate 图像生成)。
  • 允许工具服务向模型推送实时反馈数据(例如数据库查询结果、系统命令执行日志)。

在 Cursor 中,MCP 有很多实际应用场景,比如:

  • 文档自动化处理:将对话记录转成 PDF 文件。
  • 依赖管理:实时查询项目的依赖包,并提供升级建议。
  • 跨平台操作:直接执行 GitHub 命令或调用工具进行 3D 建模。

技术上,它支持 SSE 和标准输入输出两种通信协议。在配置时,你需要在 Cursor 的设置中添加 MCP 服务器地址或本地可执行命令。

对于开发者来说,MCP 的标准化接口降低了接入成本,可以快速发布 npm 包形式的服务组件。同时,协议层的安全机制也能保障敏感操作的可控性。

总之,MCP 就像是 AI 应用的 USB-C 端口,让不同的数据源和工具之间的连接变得更简单。无论你在构建什么样的 AI 驱动应用,MCP 都提供了一种标准化的方式。

### 深入了解 Function Calling、AI Agent 和 MCP 的区别

在聊到 Function Calling 的时候,我们其实是在说一个 AI 模型如何根据上下文来自动执行某些功能。简单来说,它就是 AI 模型和外部系统之间的桥梁,不同的模型可能会有各自独特的实现方式,代码的集成方法也各不相同,都是由不同的 AI 平台来定义和落实的。

接下来谈谈 Model Context Protocol(MCP),这玩意儿就像电子设备的 Type C 接口一样,方便又实用。MCP 让 AI 模型能够与各种 API 和数据源无缝衔接,旨在取代那些零散的 Agent 代码集成方式,提升 AI 系统的可靠性和效率。通过建立统一的标准,服务提供商可以基于这个协议推出自己的 AI 功能,帮助开发者更快地构建出强大的 AI 应用。这样一来,开发者就不用再重复发明轮子,通过开源项目就能建立起一个强大的 AI Agent 生态。MCP 还能在不同的应用和服务之间保持上下文联系,增强整体自主执行任务的能力。

再说说 AI Agent,这是一种智能系统,可以自主运行以达到特定目标。与传统的 AI 聊天工具只给出建议或要求手动操作不同,AI Agent 能够根据具体情况进行分析、做出决策并主动采取行动。借助 MCP 提供的功能描述,AI Agent 可以更好地理解上下文,从而在各种平台和服务上自动完成任务。

如果你对 MCP 感兴趣,这里有一些推荐的网站供你参考:
– [smithery-ai](https://link.zhihu.com/?target=https%3A//link.juejin.cn/%3Ftarget%3Dhttps%253A%252F%252Fsmithery.ai%252Fserver%252F%2540smithery-ai%252Fgithub)
– [mcp.so](https://link.zhihu.com/?target=https%3A//link.juejin.cn/%3Ftarget%3Dhttps%253A%252F%252Fmcp.so%252F)
– [MCP官方服务](https://link.zhihu.com/?target=https%3A//link.juejin.cn/%3Ftarget%3Dhttps%253A%252F%252Fmodelcontextprotocol.io%252Fintroduction)
– [cursor mcp](https://link.zhihu.com/?target=https%3A//link.juejin.cn/%3Ftarget%3Dhttps%253A%252F%252Fcursor.directory%252Fmcp)
– [cursor mcp tools](https://link.zhihu.com/?target=https%3A//link.juejin.cn/%3Ftarget%3Dhttps%253A%252F%252Fdocs.cursor.com%252Ftools)

接下来,看看如何检查 MCP Server 的状态。在完成上述配置后,你可以回到 Cursor 的 MCP 界面,查看相关状态。每个 MCP 服务名称旁边的小灯会告诉你当前的状态:红灯代表不可用,黄灯表示正在连接中,绿灯则是可用状态,而无颜色则意味着你关闭了相应的 MCP 服务。

说到 Cursor 1.0 的优势,这里有几个亮点值得一提:
– **BugBot 自动审查 PR**:它会自动分析 GitHub 上的 Pull Request,找到代码问题,甚至能生成评论建议。只需点击“Fix in Cursor”就能一键修复。
– **后台智能体全量开放**:支持代码补全、文件分析和环境配置,真正做到后台托管,让你更专注于逻辑编写。
– **Jupyter Notebook 原生支持**:在编辑器里直接操作 Notebook 单元格,数据科学爱好者绝对会喜欢。
– **项目级记忆功能(Memories)**:让 Cursor 记住你的项目历史,理解上下文的能力更强。
– **MCP 一键安装**:自动配置开发环境,OAuth 授权一步到位,零配置上线。
– **UI 全面升级**:仪表盘、图表、统计数据应有尽有,支持 Mermaid 图和 Markdown 表格的对话界面。

最后,关于白嫖和付费的问题,完全看个人需求。没有绝对的对错,但我觉得尊重技术成果是很重要的。总是想着白嫖可能会让你错失更多。有价值的技术适当收费是合理的,希望大家能以积极的心态学习和探讨,而不是消极地抱怨。

来源:知乎
原文标题:重度Cursor用户 最强 Cursor Rules 和 Cursor 配置 mcp 以及最佳实践配置方式
声明:
文章来自网络收集后经过ai改写发布,如不小心侵犯了您的权益,请联系本站删除,给您带来困扰,深表歉意!

《重度使用Cursor的你,必看!最强Cursor规则和最佳配置实践大揭秘!》有11条评论

发表评论