mirror of https://github.com/nuxt/nuxt.git
feat(nuxt): introduce `imports.scan` option (#26576)
This commit is contained in:
parent
0a1b72f9fd
commit
36c0137b7e
|
@ -17,6 +17,7 @@ export default defineNuxtModule<Partial<ImportsOptions>>({
|
||||||
},
|
},
|
||||||
defaults: {
|
defaults: {
|
||||||
autoImport: true,
|
autoImport: true,
|
||||||
|
scan: true,
|
||||||
presets: defaultPresets,
|
presets: defaultPresets,
|
||||||
global: false,
|
global: false,
|
||||||
imports: [],
|
imports: [],
|
||||||
|
@ -51,7 +52,12 @@ export default defineNuxtModule<Partial<ImportsOptions>>({
|
||||||
|
|
||||||
// composables/ dirs from all layers
|
// composables/ dirs from all layers
|
||||||
let composablesDirs: string[] = []
|
let composablesDirs: string[] = []
|
||||||
|
if (options.scan) {
|
||||||
for (const layer of nuxt.options._layers) {
|
for (const layer of nuxt.options._layers) {
|
||||||
|
// Layer disabled scanning for itself
|
||||||
|
if (layer.config?.imports?.scan === false) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
composablesDirs.push(resolve(layer.config.srcDir, 'composables'))
|
composablesDirs.push(resolve(layer.config.srcDir, 'composables'))
|
||||||
composablesDirs.push(resolve(layer.config.srcDir, 'utils'))
|
composablesDirs.push(resolve(layer.config.srcDir, 'utils'))
|
||||||
for (const dir of (layer.config.imports?.dirs ?? [])) {
|
for (const dir of (layer.config.imports?.dirs ?? [])) {
|
||||||
|
@ -75,6 +81,7 @@ export default defineNuxtModule<Partial<ImportsOptions>>({
|
||||||
return nuxt.callHook('restart')
|
return nuxt.callHook('restart')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Support for importing from '#imports'
|
// Support for importing from '#imports'
|
||||||
addTemplate({
|
addTemplate({
|
||||||
|
@ -101,14 +108,18 @@ export default defineNuxtModule<Partial<ImportsOptions>>({
|
||||||
await ctx.modifyDynamicImports(async (imports) => {
|
await ctx.modifyDynamicImports(async (imports) => {
|
||||||
// Clear old imports
|
// Clear old imports
|
||||||
imports.length = 0
|
imports.length = 0
|
||||||
// Scan `composables/`
|
|
||||||
const composableImports = await scanDirExports(composablesDirs, {
|
// Scan for `composables/` and `utils/` directories
|
||||||
|
if (options.scan) {
|
||||||
|
const scannedImports = await scanDirExports(composablesDirs, {
|
||||||
fileFilter: file => !isIgnored(file),
|
fileFilter: file => !isIgnored(file),
|
||||||
})
|
})
|
||||||
for (const i of composableImports) {
|
for (const i of scannedImports) {
|
||||||
i.priority = i.priority || priorities.find(([dir]) => i.from.startsWith(dir))?.[1]
|
i.priority = i.priority || priorities.find(([dir]) => i.from.startsWith(dir))?.[1]
|
||||||
}
|
}
|
||||||
imports.push(...composableImports)
|
imports.push(...scannedImports)
|
||||||
|
}
|
||||||
|
|
||||||
// Modules extending
|
// Modules extending
|
||||||
await nuxt.callHook('imports:extend', imports)
|
await nuxt.callHook('imports:extend', imports)
|
||||||
return imports
|
return imports
|
||||||
|
@ -127,7 +138,7 @@ export default defineNuxtModule<Partial<ImportsOptions>>({
|
||||||
// Watch composables/ directory
|
// Watch composables/ directory
|
||||||
nuxt.hook('builder:watch', async (_, relativePath) => {
|
nuxt.hook('builder:watch', async (_, relativePath) => {
|
||||||
const path = resolve(nuxt.options.srcDir, relativePath)
|
const path = resolve(nuxt.options.srcDir, relativePath)
|
||||||
if (composablesDirs.some(dir => dir === path || path.startsWith(dir + '/'))) {
|
if (options.scan && composablesDirs.some(dir => dir === path || path.startsWith(dir + '/'))) {
|
||||||
await regenerateImports()
|
await regenerateImports()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -15,6 +15,13 @@ export interface ImportsOptions extends UnimportOptions {
|
||||||
*/
|
*/
|
||||||
dirs?: string[]
|
dirs?: string[]
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enabled scan for local directories for auto imports.
|
||||||
|
* When this is disabled, `dirs` options will be ignored.
|
||||||
|
* @default true
|
||||||
|
*/
|
||||||
|
scan?: boolean
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assign auto imported utilities to `globalThis` instead of using built time transformation.
|
* Assign auto imported utilities to `globalThis` instead of using built time transformation.
|
||||||
* @default false
|
* @default false
|
||||||
|
|
Loading…
Reference in New Issue