| name | nuxtjs-import-enforcer |
| description | Automatically enforce consistent import patterns using Nuxt.js ~/ path aliases and proper organization. Use when writing imports, creating new Vue/TS files, or organizing code structure. |
Nuxt.js Import Convention Enforcer
Activation Triggers
This skill activates when:
- Writing imports in Vue/TS files
- Creating new files
- Modifying existing files with imports
Import Order
- Vue/Nuxt built-ins (usually auto-imported)
- Third-party packages
- Composables (auto-imported from ~/composables/)
- Components (auto-imported from ~/components/)
- Types
Pattern
<script setup lang="ts">
// 1. Vue (only if explicitly needed - usually auto-imported)
import { ref, computed, watch } from 'vue'
// 2. Third-party
import { z } from 'zod'
import dayjs from 'dayjs'
// 3. Composables (only if not auto-imported)
import { useAuth } from '~/composables/useAuth'
// 4. Types
import type { User } from '~/types/user'
// Implementation
const user = ref<User | null>(null)
</script>
Path Aliases
import { useAuth } from '~/composables/useAuth'
import type { User } from '~/types/user'
import { formatDate } from '~/utils/date'
import { useAuth } from '../../../composables/useAuth'
import { useAuth } from '@/composables/useAuth'
Auto-Import Awareness
Nuxt auto-imports these - DON'T import explicitly:
Vue Composition API
ref, reactive, computed, watch, watchEffect, toRef, toRefs
onMounted, onUnmounted, onBeforeMount, onBeforeUnmount
provide, inject
Nuxt Composables
useFetch, useAsyncData, useLazyFetch, useLazyAsyncData
useState, useCookie, useHead, useSeoMeta
useRoute, useRouter, useRuntimeConfig
navigateTo, abortNavigation
definePageMeta, defineNuxtComponent
Components
<MyComponent />
<BaseButton />
<ui-card />
Detection Rules
Rule 1: Unnecessary Vue Imports
import { ref, computed } from 'vue'
const count = ref(0)
const doubled = computed(() => count.value * 2)
Action: Remove unnecessary imports, use auto-imported functions
Rule 2: Unnecessary Nuxt Imports
import { useFetch } from '#app'
import { useRoute } from 'vue-router'
const { data } = await useFetch('/api/users')
const route = useRoute()
Action: Remove unnecessary imports
Rule 3: Component Imports
<!-- WRONG -->
<script setup>
import MyComponent from '~/components/MyComponent.vue'
</script>
<template>
<MyComponent />
</template>
<!-- CORRECT - Auto-imported -->
<script setup>
// No import needed
</script>
<template>
<MyComponent />
</template>
Rule 4: Relative Import Detection
import { formatDate } from '../utils/date'
import { User } from '../../types/user'
import { formatDate } from '~/utils/date'
import type { User } from '~/types/user'
Action: Convert to ~/ path alias
Auto-Fix Actions
- Unnecessary Vue import -> Remove import statement
- Unnecessary Nuxt import -> Remove import statement
- Component import -> Remove import, verify component exists
- Relative import -> Convert to ~/path
- @ alias -> Convert to ~/
Validation Report
IMPORT CONVENTION CHECK
File: pages/users/[id].vue
Import order: Correct (third-party, then local)
Path aliases: Using ~/
Auto-imports: Correctly utilized
Issues:
Line 3: Remove "import { ref } from 'vue'" - auto-imported
Line 5: Remove "import { useFetch } from '#app'" - auto-imported
Line 8: Convert "../utils" to "~/utils"
Auto-fix available: Apply 3 fixes
Configuration
In nuxt.config.ts:
export default defineNuxtConfig({
imports: {
dirs: ['composables', 'utils'],
},
components: {
dirs: ['~/components'],
},
})