feat(nuxt3): extends support for plugins/ directory (#3462)

This commit is contained in:
Kevin Marrec 2022-03-09 11:51:32 +01:00 committed by GitHub
parent 717c5b185a
commit 13dd2b98ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 25 additions and 8 deletions

View File

@ -8,6 +8,7 @@ const themeConfig = useRuntimeConfig().theme
<pre>{{ JSON.stringify(themeConfig, null, 2) }}</pre>
<BaseButton>Base Button</BaseButton>
<FancyButton>Fancy Button</FancyButton>
{{ $myPlugin() }}
</NuxtExampleLayout>
</template>

View File

@ -0,0 +1,7 @@
export default defineNuxtPlugin((/* nuxtApp */) => {
return {
provide: {
myPlugin: () => 'String generated from my auto-imported plugin!'
}
}
})

View File

@ -37,6 +37,13 @@ export async function loadNuxtConfig (opts: LoadNuxtConfigOptions): Promise<Nuxt
nuxtConfig._nuxtConfigFile = 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
// Resolve and apply defaults

View File

@ -1,7 +1,7 @@
import { promises as fsp } from 'fs'
import { dirname, resolve } from 'pathe'
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 * 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')
// Resolve plugins
app.plugins = [
...nuxt.options.plugins,
...await resolveFiles(nuxt.options.srcDir, [
'plugins/*.{ts,js,mjs,cjs,mts,cts}',
'plugins/*/index.*{ts,js,mjs,cjs,mts,cts}'
])
].map(plugin => normalizePlugin(plugin))
for (const config of [...nuxt.options._extends.map(layer => layer.config), nuxt.options]) {
app.plugins.push(...[
...config.plugins ?? [],
...await resolveFiles(config.srcDir, [
'plugins/*.{ts,js,mjs,cjs,mts,cts}',
'plugins/*/index.*{ts,js,mjs,cjs,mts,cts}'
])
].map(plugin => normalizePlugin(plugin as NuxtPlugin)))
}
// Extend app
await nuxt.callHook('app:resolve', app)