@@ -84,10 +84,14 @@ class BundlerGeneral {
84
84
let mainName = this . config . order [ 0 ] ;
85
85
86
86
/** @var {Object.<string, string[]>} */
87
- let notBundledMap = { } ;
87
+ const notBundledMap = { } ;
88
+ /** @var {Object.<string, string> */
89
+ const moduleChunkMap = { } ;
90
+ /** @var {Object.<string, string[]>} */
91
+ const chunkDirectDependenctModulesMap = { } ;
88
92
89
93
this . config . order . forEach ( ( name , i ) => {
90
- let data = this . #bundleChunk( name , i === 0 , {
94
+ const data = this . #bundleChunk( name , i === 0 , {
91
95
files : files ,
92
96
templateFiles : templateFiles ,
93
97
} ) ;
@@ -100,13 +104,21 @@ class BundlerGeneral {
100
104
101
105
console . log ( ` Chunk '${ name } ' done, ${ data . files . length } files.` )
102
106
107
+ chunkDirectDependenctModulesMap [ name ] = data . directDependencyModules ;
108
+
109
+ if ( i > 0 ) {
110
+ for ( const m of data . modules ) {
111
+ moduleChunkMap [ m ] = name ;
112
+ }
113
+ }
114
+
103
115
if ( i === 0 && this . config . order . length > 1 ) {
104
116
return ;
105
117
}
106
118
107
119
data . modules . forEach ( item => mapping [ item ] = name ) ;
108
120
109
- let bundleFile = this . filePattern . replace ( '{*}' , name ) ;
121
+ const bundleFile = this . filePattern . replace ( '{*}' , name ) ;
110
122
111
123
let requires = [ ] . concat ( this . config . chunks [ name ] . requires ?? [ ] ) ;
112
124
@@ -115,15 +127,44 @@ class BundlerGeneral {
115
127
}
116
128
117
129
if ( requires . length ) {
118
- let part = JSON . stringify ( requires ) ;
130
+ const part = JSON . stringify ( requires ) ;
119
131
120
132
result [ mainName ] += `Espo.loader.mapBundleDependencies('${ name } ', ${ part } );\n` ;
121
133
}
122
134
123
135
result [ mainName ] += `Espo.loader.mapBundleFile('${ name } ', '${ bundleFile } ');\n` ;
124
136
} ) ;
125
137
126
- let notBundledModules = [ ] ;
138
+ this . config . order . slice ( 1 ) . forEach ( name => {
139
+ const dependsOnChunks = [ ] ;
140
+ const deps = [ ] ;
141
+
142
+ for ( const m of chunkDirectDependenctModulesMap [ name ] ) {
143
+ const dependeeChunk = moduleChunkMap [ m ] ;
144
+
145
+ if ( ! dependeeChunk ) {
146
+ continue ;
147
+ }
148
+
149
+ deps . push ( m ) ;
150
+
151
+ if ( ! dependsOnChunks . includes ( dependeeChunk ) ) {
152
+ dependsOnChunks . push ( dependeeChunk ) ;
153
+ }
154
+ }
155
+
156
+ if ( dependsOnChunks . length ) {
157
+ const part = dependsOnChunks . map ( it => `'${ it } '` ) . join ( ', ' ) ;
158
+
159
+ console . warn ( `\nWarning: Chunk '${ name } ' depends on chunk(s) ${ part } .` ) ;
160
+ console . log ( 'Depends on:' ) ;
161
+ console . log ( deps ) ;
162
+
163
+ console . log ( '\nRecommended to fix.' ) ;
164
+ }
165
+ } ) ;
166
+
167
+ const notBundledModules = [ ] ;
127
168
128
169
this . config . order . forEach ( name => {
129
170
notBundledMap [ name ]
@@ -133,7 +174,7 @@ class BundlerGeneral {
133
174
} ) ;
134
175
135
176
if ( notBundledModules . length ) {
136
- let part = notBundledModules
177
+ const part = notBundledModules
137
178
. map ( item => ' ' + item )
138
179
. join ( '\n' ) ;
139
180
@@ -156,17 +197,20 @@ class BundlerGeneral {
156
197
* templateFiles: string[],
157
198
* notBundledModules: string[],
158
199
* dependencyModules: [],
200
+ * directDependencyModules: string[],
159
201
* }}
160
202
*/
161
203
#bundleChunk( name , isMain , alreadyBundled ) {
162
204
let contents = '' ;
163
205
let modules = [ ] ;
164
206
let dependencyModules = [ ] ;
207
+ let directDependencyModules = [ ] ;
208
+
209
+ const params = this . config . chunks [ name ] ;
165
210
166
- let params = this . config . chunks [ name ] ;
211
+ const patterns = params . patterns ;
167
212
168
- let patterns = params . patterns ;
169
- let lookupPatterns = [ ]
213
+ const lookupPatterns = [ ]
170
214
. concat ( this . config . lookupPatterns )
171
215
. concat ( params . lookupPatterns || [ ] ) ;
172
216
@@ -175,7 +219,7 @@ class BundlerGeneral {
175
219
let notBundledModules = [ ] ;
176
220
177
221
if ( params . patterns ) {
178
- let bundler = new Bundler (
222
+ const bundler = new Bundler (
179
223
this . config . modulePaths ,
180
224
this . config . basePath ,
181
225
this . config . transpiledPath
@@ -188,7 +232,7 @@ class BundlerGeneral {
188
232
ignoreFiles = ignoreFiles . concat ( alreadyBundled . files ) ;
189
233
}
190
234
191
- let data = bundler . bundle ( {
235
+ const data = bundler . bundle ( {
192
236
name : name ,
193
237
files : params . files ,
194
238
patterns : patterns ,
@@ -212,14 +256,15 @@ class BundlerGeneral {
212
256
213
257
notBundledModules = data . notBundledModules ;
214
258
dependencyModules = data . dependencyModules ;
259
+ directDependencyModules = data . directDependencyModules ;
215
260
}
216
261
217
262
// Pre-compiled templates turned out to be slower if too many are bundled.
218
263
// To be used sparingly.
219
264
if ( params . templatePatterns ) {
220
- let ignoreFiles = params . noDuplicates ? [ ] . concat ( alreadyBundled . templateFiles ) : [ ] ;
265
+ const ignoreFiles = params . noDuplicates ? [ ] . concat ( alreadyBundled . templateFiles ) : [ ] ;
221
266
222
- let data = ( new Precompiler ( ) ) . precompile ( {
267
+ const data = ( new Precompiler ( ) ) . precompile ( {
223
268
patterns : params . templatePatterns ,
224
269
modulePaths : this . config . modulePaths ,
225
270
ignoreFiles : ignoreFiles ,
@@ -236,6 +281,7 @@ class BundlerGeneral {
236
281
templateFiles : bundledTemplateFiles ,
237
282
notBundledModules : notBundledModules ,
238
283
dependencyModules : dependencyModules ,
284
+ directDependencyModules : directDependencyModules ,
239
285
} ;
240
286
}
241
287
}
0 commit comments