1
+ import pkgJson from './package.json'
1
2
2
- const EXTERNAL_GLOBALS = {
3
+ const [ ourPkgNames , otherPkgNames ] = getDepNames ( )
4
+ const externalGlobals = {
3
5
vue : 'Vue' ,
4
6
'@fullcalendar/core' : 'FullCalendar' ,
5
7
'@fullcalendar/core/internal' : 'FullCalendar.Internal'
@@ -14,7 +16,10 @@ export default [
14
16
format : 'cjs' ,
15
17
exports : 'named'
16
18
} ,
17
- external : Object . keys ( EXTERNAL_GLOBALS )
19
+ plugins : [
20
+ externalizePkgsPlugin ( ourPkgNames , '.cjs' ) ,
21
+ externalizePkgsPlugin ( otherPkgNames ) ,
22
+ ] ,
18
23
} ,
19
24
20
25
// IIFE
@@ -25,8 +30,60 @@ export default [
25
30
format : 'iife' ,
26
31
name : 'FullCalendar.Vue' ,
27
32
exports : 'named' ,
28
- globals : EXTERNAL_GLOBALS
33
+ globals : externalGlobals
29
34
} ,
30
- external : Object . keys ( EXTERNAL_GLOBALS )
35
+ plugins : [
36
+ externalizePkgsPlugin ( ourPkgNames ) ,
37
+ externalizePkgsPlugin ( otherPkgNames ) ,
38
+ ] ,
31
39
} ,
32
40
]
41
+
42
+ // plugins & utils
43
+ // -------------------------------------------------------------------------------------------------
44
+
45
+ function getDepNames ( ) {
46
+ const pkgNames = Object . keys ( {
47
+ ...pkgJson . dependencies ,
48
+ ...pkgJson . peerDependencies ,
49
+ ...pkgJson . optionalDependencies ,
50
+ } )
51
+ const ourPkgNames = [ ]
52
+ const otherPkgNames = [ ]
53
+
54
+ for ( const pkgName of pkgNames ) {
55
+ if ( pkgName . match ( / ^ @ f u l l c a l e n d a r \/ / ) ) {
56
+ ourPkgNames . push ( pkgName )
57
+ } else {
58
+ otherPkgNames . push ( pkgName )
59
+ }
60
+ }
61
+
62
+ return [ ourPkgNames , otherPkgNames ]
63
+ }
64
+
65
+ function externalizePkgsPlugin ( pkgNames , forceExtension ) {
66
+ return {
67
+ name : 'externalize-pkgs' ,
68
+ resolveId ( importId ) {
69
+ if ( ! isImportRelative ( importId ) ) {
70
+ for ( const pkgName of pkgNames ) {
71
+ if ( importId === pkgName || importId . startsWith ( pkgName + '/' ) ) {
72
+ if ( forceExtension ) {
73
+ if ( importId === pkgName ) {
74
+ importId += '/index' + forceExtension
75
+ } else {
76
+ importId += forceExtension
77
+ }
78
+ }
79
+ return { id : importId , external : true }
80
+ }
81
+ }
82
+ }
83
+ } ,
84
+ }
85
+ }
86
+
87
+ function isImportRelative ( importId ) {
88
+ return importId . startsWith ( './' ) || importId . startsWith ( '../' )
89
+ }
0 commit comments