| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Module to scan and auto import components for Nuxt.js 2.10+
Create your components :
components/
ComponentFoo.vue
ComponentBar.vueUse them whenever you want, there will be auto imported in .vue files :
<template>
<ComponentFoo />
<component-bar />
</template>No need anymore to manually import them in the script section !
See live demo.
To make a component imported dynamically (lazy loaded), all you need is adding a Lazy prefix in your templates.
If you think this prefix should be customizable, feel free to create a feature issue !
You are now being able to easily import a component on-demand :
<template>
<LazyComponentFoo v-if="foo" />
<button @click="loadFoo">
Load Foo
</button>
</template>
<script>
export default {
data () {
return {
foo: null
}
},
methods: {
async loadFoo () {
this.foo = await this.$axios.$get('foo')
}
}
}
</script>If you have components in nested directories:
components/
foo/
Bar.vueThe component name will be based on its filename:
<Bar />We do recommend to use the directory name in the filename for clarity in order to use <FooBar />:
components/
foo/
FooBar.vueIf you want to keep the filename as Bar.vue, consider using the prefix option:
components: [
'~/components/',
{
path: '~/components/foo/',
prefix: 'foo'
}
]If you are using nuxt-edge or Nuxt 2.13+ (release soon 👀) simply set components: true in your nuxt.config.js:
export default {
components: true
}yarn add --dev @nuxt/components # or npm install --save-dev @nuxt/componentsexport default {
buildModules: [
// TODO: Remove when upgrading to nuxt 2.13+
'@nuxt/components'
]
}Please upgrade your Nuxt version in order to use this module.
You can define the options of the module in the components property of your nuxt.config.js:
export default {
buildModules: [
'@nuxt/components',
],
components: {
/* module options */
}
}List of directories to scan, with customizable options when using Object syntax.
String items are shortcut to Object with only path provided :
'~/components' === { path: '~/components' }Path (absolute or relative) to the directory containing your components.
We highly recommend using Nuxt aliases :
| Alias | Directory |
|---|---|
| ~ or @ | srcDir |
| ~~ or @@ | rootDir |
Accept Pattern that will be run against specified path.
Ignore patterns that will be run against specified path.
Prefix components for specified path.
// nuxt.config.js
export default {
components: {
dirs: [
'~/components',
{
path: '~/components/awesome/',
prefix: 'awesome'
}
]
}
}components/
awesome/
Button.vue
Button.vue<template>
<div>
<AwesomeButton>Click on me 🤘</AwesomeButton>
<Button>Click on me</Button>
</div>
</template>Watch specified path for changes, including file additions and file deletions.
Transpile specified path using build.transpile, by default ('auto') it will set transpile: true if node_modules/ is in path.
Making Vue Component libraries with automatic tree-shaking and component registration is now damn easy ✨
This module expose a hook named components:dirs so you can easily extend the directory list without updating user configuration in your Nuxt module.
Imagine a directory structure like this:
| node_modules/
---| awesome-ui/
------| components/
---------| Alert.vue
---------| Button.vue
------| nuxt.js
| pages/
---| index.vue
| nuxt.config.jsThen in awesome-ui/nuxt.js you can use the components:dir hook:
import { join } from 'path'
export default function () {
this.nuxt.hook('components:dirs', (dirs) => {
// Add ./components dir to the list
dirs.push({
path: join(__dirname, 'components'),
prefix: 'awesome'
})
})
}That's it! Now in your project, you can import your ui library as a Nuxt module in your nuxt.config.js:
export default {
buildModules: [
'@nuxt/components',
'awesome-ui/nuxt'
]
}And directly use the module components (prefixed with awesome-), our pages/index.vue:
<template>
<div>
My <AwesomeButton>UI button</AwesomeButton>!
<awesome-alert>Here's an alert!</awesome-alert>
</div>
</template>It will automatically import the components only if used and also support HMR when updating your components in node_modules/awesome-ui/components/.
Next: publish your awesome-ui module to NPM and share it with the other Nuxters ✨
Copyright (c) Nuxt.js Team
| Back | FazBrowse Home | New Git URL |