bundler map dependencies

This commit is contained in:
Yuri Kuznetsov
2023-06-15 18:50:55 +03:00
parent 6686e78069
commit 89fa2f0523
2 changed files with 47 additions and 25 deletions
+13 -3
View File
@@ -44,6 +44,7 @@ class BundlerGeneral {
* noDuplicates?: boolean,
* dependentOn?: string[],
* requires?: string[],
* mapDependencies?: boolean,
* }>,
* modulePaths?: Record.<string, string>,
* lookupPatterns: string[],
@@ -93,6 +94,8 @@ class BundlerGeneral {
notBundledMap[name] = data.notBundledModules;
result[name] = data.contents;
console.log(` Chunk '${name}' done, ${data.files.length} files.`)
if (i === 0 && this.config.mainChunk) {
return;
}
@@ -101,9 +104,13 @@ class BundlerGeneral {
let bundleFile = this.filePattern.replace('{*}', name);
let requires = this.config.chunks[name].requires;
let requires = [].concat(this.config.chunks[name].requires ?? []);
if (requires) {
if (this.config.chunks[name].mapDependencies) {
requires = requires.concat(data.dependencyModules);
}
if (requires.length) {
let part = JSON.stringify(requires);
result[mainName] += `Espo.loader.mapBundleDependencies('${name}', ${part});\n`;
@@ -144,12 +151,13 @@ class BundlerGeneral {
* files: string[],
* templateFiles: string[],
* notBundledModules: string[],
* dependencyModules: [],
* }}
*/
#bundleChunk(name, isMain, alreadyBundled) {
let contents = '';
let modules = [];
let dependencyModules = [];
let params = this.config.chunks[name];
@@ -197,6 +205,7 @@ class BundlerGeneral {
bundledFiles = data.files;
notBundledModules = data.notBundledModules;
dependencyModules = data.dependencyModules;
}
// Pre-compiled templates turned out to be slower if too many are bundled.
@@ -220,6 +229,7 @@ class BundlerGeneral {
files: bundledFiles,
templateFiles: bundledTemplateFiles,
notBundledModules: notBundledModules,
dependencyModules: dependencyModules,
};
}
}
+34 -22
View File
@@ -55,24 +55,25 @@ class Bundler {
* Bundles Espo js files into chunks.
*
* @param {{
* name: string,
* files?: string[],
* patterns: string[],
* ignoreFiles?: string[],
* lookupPatterns?: string[],
* ignoreFullPathFiles?: string[],
* dependentOn?: string[],
* libs: {
* src?: string,
* bundle?: boolean,
* key?: string,
* }[],
* name: string,
* files?: string[],
* patterns: string[],
* ignoreFiles?: string[],
* lookupPatterns?: string[],
* ignoreFullPathFiles?: string[],
* dependentOn?: string[],
* libs: {
* src?: string,
* bundle?: boolean,
* key?: string,
* }[],
* }} params
* @return {{
* contents: string,
* files: string[],
* modules: string[],
* notBundledModules: string[],
* contents: string,
* files: string[],
* modules: string[],
* notBundledModules: string[],
* dependencyModules: string[],
* }}
*/
bundle(params) {
@@ -95,7 +96,7 @@ class Bundler {
let notBundledModules = [];
let sortedFiles = this.#sortFiles(
let {files: sortedFiles, depModules} = this.#sortFiles(
params.name,
fullPathFiles,
allFiles,
@@ -117,6 +118,7 @@ class Bundler {
files: sortedFiles,
modules: modules,
notBundledModules: notBundledModules,
dependencyModules: depModules,
};
}
@@ -166,7 +168,10 @@ class Bundler {
* @param {string[]} ignoreFiles
* @param {string[]} notBundledModules
* @param {string[]|null} dependentOn
* @return {string[]}
* @return {{
* files: string[],
* depModules: string[],
* }}
*/
#sortFiles(
name,
@@ -207,18 +212,22 @@ class Bundler {
});
let depModules = [];
let allDepModules = [];
modules
.forEach(name => {
let deps = this.#obtainAllDeps(name, map);
deps
.filter(item => !modules.includes(item))
.filter(item => !allDepModules.includes(item))
.forEach(item => allDepModules.push(item));
deps
.filter(item => !item.includes('!'))
.filter(item => !modules.includes(item))
.filter(item => !depModules.includes(item))
.forEach(item => {
depModules.push(item);
});
.forEach(item => depModules.push(item));
});
modules = modules
@@ -264,7 +273,10 @@ class Bundler {
return moduleFileMap[name];
});
return standalonePathList.concat(modulePaths);
return {
files: standalonePathList.concat(modulePaths),
depModules: allDepModules,
};
}
/**