@@ -4,7 +4,7 @@ import { slash, toArray } from '@antfu/utils'
4
4
import { getPackageInfoSync , isPackageExists } from 'local-pkg'
5
5
import { detectTypeImports } from './type-imports/detect'
6
6
7
- export const defaultOptions : Omit < Required < Options > , 'include' | 'exclude' | 'excludeNames' | 'transformer' | 'globs' | 'directives' | 'types' | 'version' > = {
7
+ export const defaultOptions : Omit < Required < Options > , 'include' | 'exclude' | 'excludeNames' | 'transformer' | 'globs' | 'globsExclude' | ' directives' | 'types' | 'version' > = {
8
8
dirs : 'src/components' ,
9
9
extensions : 'vue' ,
10
10
deep : true ,
@@ -17,7 +17,6 @@ export const defaultOptions: Omit<Required<Options>, 'include' | 'exclude' | 'ex
17
17
transformerUserResolveFunctions : true ,
18
18
19
19
resolvers : [ ] ,
20
- globsExclude : [ ] ,
21
20
22
21
importPathTransform : v => v ,
23
22
@@ -30,7 +29,7 @@ function normalizeResolvers(resolvers: (ComponentResolver | ComponentResolver[])
30
29
31
30
function resolveGlobsExclude ( root : string , glob : string ) {
32
31
const excludeReg = / ^ ! /
33
- return `${ excludeReg . test ( glob ) ? '!' : '' } ${ resolve ( root , glob . replace ( excludeReg , '' ) ) } `
32
+ return slash ( `${ excludeReg . test ( glob ) ? '!' : '' } ${ resolve ( root , glob . replace ( excludeReg , '' ) ) } ` )
34
33
}
35
34
36
35
export function resolveOptions ( options : Options , root : string ) : ResolvedOptions {
@@ -39,7 +38,8 @@ export function resolveOptions(options: Options, root: string): ResolvedOptions
39
38
resolved . extensions = toArray ( resolved . extensions )
40
39
41
40
if ( resolved . globs ) {
42
- resolved . globs = toArray ( resolved . globs ) . map ( ( glob : string ) => slash ( resolveGlobsExclude ( root , glob ) ) )
41
+ resolved . globs = toArray ( resolved . globs )
42
+ . map ( glob => resolveGlobsExclude ( root , glob ) )
43
43
resolved . resolvedDirs = [ ]
44
44
}
45
45
else {
@@ -48,17 +48,38 @@ export function resolveOptions(options: Options, root: string): ResolvedOptions
48
48
: `{${ resolved . extensions . join ( ',' ) } }`
49
49
50
50
resolved . dirs = toArray ( resolved . dirs )
51
- resolved . resolvedDirs = resolved . dirs . map ( i => slash ( resolveGlobsExclude ( root , i ) ) )
52
51
53
- resolved . globs = resolved . resolvedDirs . map ( i => resolved . deep
54
- ? slash ( join ( i , `**/*.${ extsGlob } ` ) )
55
- : slash ( join ( i , `*.${ extsGlob } ` ) ) ,
56
- )
52
+ const globs = resolved . dirs . map ( i => resolveGlobsExclude ( root , i ) )
53
+
54
+ resolved . resolvedDirs = globs . filter ( i => ! i . startsWith ( '!' ) )
55
+ resolved . globs = globs . map ( ( i ) => {
56
+ let prefix = ''
57
+ if ( i . startsWith ( '!' ) ) {
58
+ prefix = '!'
59
+ i = i . slice ( 1 )
60
+ }
61
+ return resolved . deep
62
+ ? prefix + slash ( join ( i , `**/*.${ extsGlob } ` ) )
63
+ : prefix + slash ( join ( i , `*.${ extsGlob } ` ) )
64
+ } )
57
65
58
66
if ( ! resolved . extensions . length )
59
67
throw new Error ( '[unplugin-vue-components] `extensions` option is required to search for components' )
60
68
}
61
69
70
+ if ( ! resolved . globsExclude )
71
+ resolved . globsExclude = [ `**/node_modules/**` ]
72
+ resolved . globsExclude = toArray ( resolved . globsExclude || [ ] )
73
+ . map ( i => resolveGlobsExclude ( root , i ) )
74
+
75
+ // Move negated globs to globsExclude
76
+ resolved . globs = resolved . globs . filter ( ( i ) => {
77
+ if ( ! i . startsWith ( '!' ) )
78
+ return true
79
+ resolved . globsExclude . push ( i . slice ( 1 ) )
80
+ return false
81
+ } )
82
+
62
83
resolved . dts = ! resolved . dts
63
84
? false
64
85
: resolve (
0 commit comments