diff options
Diffstat (limited to 'config/webpack/loader')
| -rw-r--r-- | config/webpack/loader/arrange-shared-module-loader.js | 26 | ||||
| -rw-r--r-- | config/webpack/loader/count-imports-loader.js | 18 | ||||
| -rw-r--r-- | config/webpack/loader/dynamic-imports-loader.js | 31 |
3 files changed, 44 insertions, 31 deletions
diff --git a/config/webpack/loader/arrange-shared-module-loader.js b/config/webpack/loader/arrange-shared-module-loader.js new file mode 100644 index 0000000..9e21b23 --- /dev/null +++ b/config/webpack/loader/arrange-shared-module-loader.js @@ -0,0 +1,26 @@ +const path = require("path"); + +const { ImportManager } = require("import-manager"); + +const sharedModules = webpackRequire("utils/shared-modules.js"); + +module.exports = function(source) { + const { sortedSharedModules } = this.getOptions(); + const manager = new ImportManager(source); + + for (const unit of manager.imports.es6.units) { + const moduleIndex = sharedModules.indexOf(unit.module.name); + + if (moduleIndex >= 0) { + const currentSharedModuleName = sharedModules[moduleIndex]; + + if (!sortedSharedModules.includes(currentSharedModuleName)) { + sortedSharedModules.push(currentSharedModuleName); + } + } + } + + sortedSharedModules.push(path.basename(this.resourcePath.substring(0, this.resourcePath.length - 3))); + + return source; +}; diff --git a/config/webpack/loader/count-imports-loader.js b/config/webpack/loader/count-imports-loader.js new file mode 100644 index 0000000..4c3faa4 --- /dev/null +++ b/config/webpack/loader/count-imports-loader.js @@ -0,0 +1,18 @@ +const { ImportManager } = require("import-manager"); + +const sharedModules = webpackRequire("utils/shared-modules.js"); + +module.exports = function(source) { + const { sharedModulesImportedCount } = this.getOptions(); + const manager = new ImportManager(source); + + for (const unit of manager.imports.es6.units) { + const moduleIndex = sharedModules.indexOf(unit.module.name); + + if (moduleIndex >= 0) { + sharedModulesImportedCount[sharedModules[moduleIndex]]++; + } + } + + return source; +}; diff --git a/config/webpack/loader/dynamic-imports-loader.js b/config/webpack/loader/dynamic-imports-loader.js deleted file mode 100644 index 12eb5b7..0000000 --- a/config/webpack/loader/dynamic-imports-loader.js +++ /dev/null @@ -1,31 +0,0 @@ -const { ImportManager } = require("import-manager"); -const { getFileNameHash } = webpackRequire("utils/file-name-hash"); - -const sharedModules = webpackRequire("utils/shared-modules.js"); - -module.exports = source => { - const manager = new ImportManager(source); - let modified = false; - - for (const unit of manager.imports.es6.units) { - const moduleIndex = sharedModules.indexOf(unit.module.name); - - if (moduleIndex >= 0 && unit.type === "es6") { - const importedModuleNames = unit.members.entities - .map(entity => `\t${entity.name}`) - .concat(unit.defaultMembers.entities.map(entity => `\tdefault: ${entity.name}`)) - .join(",\n"); - - const importStatement = `const {\n${importedModuleNames}\n} = await import(/* webpackIgnore: true */ "/shared/${getFileNameHash(sharedModules[moduleIndex], "shared")}.js");\n`; - - unit.methods = { - makeUntraceable() {} - }; - manager.remove(unit); - manager.insertStatement(importStatement, "bottom", "dynamic"); - modified = true; - } - } - - return modified ? manager.code.toString() + "\nexport {};" : source; -}; |
