mirror of
https://github.com/nuxt/nuxt.git
synced 2025-02-21 07:59:33 +00:00
feat(nuxt3): extends support for plugins/
directory (#3462)
This commit is contained in:
parent
717c5b185a
commit
13dd2b98ea
@ -8,6 +8,7 @@ const themeConfig = useRuntimeConfig().theme
|
|||||||
<pre>{{ JSON.stringify(themeConfig, null, 2) }}</pre>
|
<pre>{{ JSON.stringify(themeConfig, null, 2) }}</pre>
|
||||||
<BaseButton>Base Button</BaseButton>
|
<BaseButton>Base Button</BaseButton>
|
||||||
<FancyButton>Fancy Button</FancyButton>
|
<FancyButton>Fancy Button</FancyButton>
|
||||||
|
{{ $myPlugin() }}
|
||||||
</NuxtExampleLayout>
|
</NuxtExampleLayout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
7
examples/config-extends/base/plugins/my-plugin.ts
Normal file
7
examples/config-extends/base/plugins/my-plugin.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
export default defineNuxtPlugin((/* nuxtApp */) => {
|
||||||
|
return {
|
||||||
|
provide: {
|
||||||
|
myPlugin: () => 'String generated from my auto-imported plugin!'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
@ -37,6 +37,13 @@ export async function loadNuxtConfig (opts: LoadNuxtConfigOptions): Promise<Nuxt
|
|||||||
|
|
||||||
nuxtConfig._nuxtConfigFile = configFile
|
nuxtConfig._nuxtConfigFile = configFile
|
||||||
nuxtConfig._nuxtConfigFiles = [configFile]
|
nuxtConfig._nuxtConfigFiles = [configFile]
|
||||||
|
|
||||||
|
// Resolve `rootDir` & `srcDir` of layers
|
||||||
|
for (const layer of layers) {
|
||||||
|
layer.config.rootDir = layer.config.rootDir ?? layer.cwd
|
||||||
|
layer.config.srcDir = resolve(layer.config.rootDir, layer.config.srcDir)
|
||||||
|
}
|
||||||
|
|
||||||
nuxtConfig._extends = layers
|
nuxtConfig._extends = layers
|
||||||
|
|
||||||
// Resolve and apply defaults
|
// Resolve and apply defaults
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { promises as fsp } from 'fs'
|
import { promises as fsp } from 'fs'
|
||||||
import { dirname, resolve } from 'pathe'
|
import { dirname, resolve } from 'pathe'
|
||||||
import defu from 'defu'
|
import defu from 'defu'
|
||||||
import type { Nuxt, NuxtApp } from '@nuxt/schema'
|
import type { Nuxt, NuxtApp, NuxtPlugin } from '@nuxt/schema'
|
||||||
import { findPath, resolveFiles, normalizePlugin, normalizeTemplate, compileTemplate, templateUtils } from '@nuxt/kit'
|
import { findPath, resolveFiles, normalizePlugin, normalizeTemplate, compileTemplate, templateUtils } from '@nuxt/kit'
|
||||||
|
|
||||||
import * as defaultTemplates from './templates'
|
import * as defaultTemplates from './templates'
|
||||||
@ -66,13 +66,15 @@ export async function resolveApp (nuxt: Nuxt, app: NuxtApp) {
|
|||||||
app.rootComponent = resolve(nuxt.options.appDir, 'components/nuxt-root.vue')
|
app.rootComponent = resolve(nuxt.options.appDir, 'components/nuxt-root.vue')
|
||||||
|
|
||||||
// Resolve plugins
|
// Resolve plugins
|
||||||
app.plugins = [
|
for (const config of [...nuxt.options._extends.map(layer => layer.config), nuxt.options]) {
|
||||||
...nuxt.options.plugins,
|
app.plugins.push(...[
|
||||||
...await resolveFiles(nuxt.options.srcDir, [
|
...config.plugins ?? [],
|
||||||
|
...await resolveFiles(config.srcDir, [
|
||||||
'plugins/*.{ts,js,mjs,cjs,mts,cts}',
|
'plugins/*.{ts,js,mjs,cjs,mts,cts}',
|
||||||
'plugins/*/index.*{ts,js,mjs,cjs,mts,cts}'
|
'plugins/*/index.*{ts,js,mjs,cjs,mts,cts}'
|
||||||
])
|
])
|
||||||
].map(plugin => normalizePlugin(plugin))
|
].map(plugin => normalizePlugin(plugin as NuxtPlugin)))
|
||||||
|
}
|
||||||
|
|
||||||
// Extend app
|
// Extend app
|
||||||
await nuxt.callHook('app:resolve', app)
|
await nuxt.callHook('app:resolve', app)
|
||||||
|
Loading…
Reference in New Issue
Block a user