UNPKG

webpack

Version:

Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.

110 lines (95 loc) 2.73 kB
/* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ "use strict"; const DependencyReference = require("./DependencyReference"); const ModuleDependency = require("./ModuleDependency"); const Template = require("../Template"); class HarmonyImportDependency extends ModuleDependency { constructor(request, originModule, sourceOrder, parserScope) { super(request); this.redirectedModule = undefined; this.originModule = originModule; this.sourceOrder = sourceOrder; this.parserScope = parserScope; } get _module() { return this.redirectedModule || this.module; } getReference() { if (!this._module) return null; return new DependencyReference( this._module, false, this.weak, this.sourceOrder ); } getImportVar() { let importVarMap = this.parserScope.importVarMap; if (!importVarMap) this.parserScope.importVarMap = importVarMap = new Map(); let importVar = importVarMap.get(this._module); if (importVar) return importVar; importVar = `${Template.toIdentifier( `${this.userRequest}` )}__WEBPACK_IMPORTED_MODULE_${importVarMap.size}__`; importVarMap.set(this._module, importVar); return importVar; } getImportStatement(update, runtime) { return runtime.importStatement({ update, module: this._module, importVar: this.getImportVar(), request: this.request, originModule: this.originModule }); } updateHash(hash) { super.updateHash(hash); const importedModule = this._module; hash.update( (importedModule && (!importedModule.buildMeta || importedModule.buildMeta.exportsType)) + "" ); hash.update((importedModule && importedModule.id) + ""); } disconnect() { super.disconnect(); this.redirectedModule = undefined; } } module.exports = HarmonyImportDependency; const importEmittedMap = new WeakMap(); HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate { apply(dep, source, runtime) { // no-op } getHarmonyInitOrder(dep) { return dep.sourceOrder; } static isImportEmitted(dep, source) { let sourceInfo = importEmittedMap.get(source); if (!sourceInfo) return false; const key = dep._module || dep.request; return key && sourceInfo.emittedImports.get(key); } harmonyInit(dep, source, runtime, dependencyTemplates) { let sourceInfo = importEmittedMap.get(source); if (!sourceInfo) { importEmittedMap.set( source, (sourceInfo = { emittedImports: new Map() }) ); } const key = dep._module || dep.request; if (key && sourceInfo.emittedImports.get(key)) return; sourceInfo.emittedImports.set(key, true); const content = dep.getImportStatement(false, runtime); source.insert(-1, content); } };