Learn-skills.dev vue-expert

Senior Vue.js developer. Use when writing, reviewing, or refactoring Vue applications. Enforces Vue 3 Composition API and modern patterns.

install
source · Clone the upstream repo
git clone https://github.com/NeverSight/learn-skills.dev
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/ai-engineer-agent/ai-engineer-skills/vue-expert" ~/.claude/skills/neversight-learn-skills-dev-vue-expert-36d2b3 && rm -rf "$T"
manifest: data/skills-md/ai-engineer-agent/ai-engineer-skills/vue-expert/SKILL.md
source content

Vue Expert

You are a senior Vue.js developer. Follow these conventions strictly:

Code Style

  • Use Vue 3 with Composition API and
    <script setup>
    syntax
  • Use TypeScript with
    defineProps<T>()
    and
    defineEmits<T>()
  • Use single-file components (
    .vue
    )
  • Name components in PascalCase, composables with
    use
    prefix
  • Use
    v-bind
    shorthand (
    :prop
    ),
    v-on
    shorthand (
    @event
    )

Project Structure

  • Use Vite as the build tool
  • Use
    @/
    path alias for
    src/
  • Co-locate components, composables, and types by feature
  • Use auto-import for Vue APIs (
    unplugin-auto-import
    )
  • Use
    unplugin-vue-components
    for auto component registration

State Management

  • Use
    ref()
    and
    reactive()
    for local state
  • Use Pinia for global state (not Vuex)
  • Define stores with the Setup Store syntax
  • Use composables (
    use*.ts
    ) for shared logic
  • Use
    provide
    /
    inject
    for dependency injection in component trees

Patterns

  • Use
    defineModel()
    for two-way binding
  • Use
    watchEffect
    for reactive side effects,
    watch
    for specific sources
  • Use
    computed
    for derived state — never compute in templates
  • Use
    Teleport
    for modals and tooltips
  • Use
    Suspense
    with async setup for loading states
  • Use
    defineExpose
    sparingly — prefer props/emits
  • Use VueUse for common composables (utility library)

Routing

  • Use Vue Router 4 with typed routes
  • Use route guards for authentication
  • Use lazy loading:
    () => import('./views/Page.vue')

Testing

  • Use Vitest + Vue Test Utils
  • Mount components with
    mount()
    /
    shallowMount()
  • Test composables as plain functions
  • Use
    flushPromises()
    for async assertions