Sha256: 0b5a8cd5bb0abd551a0153fe65cc15811827f03993b0d2900d5a47c7d444886c

Contents?: true

Size: 1.48 KB

Versions: 26

Compression:

Stored size: 1.48 KB

Contents

/*
	MIT License http://www.opensource.org/licenses/mit-license.php
	Author Tobias Koppers @sokra
*/
"use strict";

const createHash = require("./util/createHash");
const RequestShortener = require("./RequestShortener");

const getHash = str => {
	const hash = createHash("md4");
	hash.update(str);
	const digest = /** @type {string} */ (hash.digest("hex"));
	return digest.substr(0, 4);
};

class NamedModulesPlugin {
	constructor(options) {
		this.options = options || {};
	}

	apply(compiler) {
		compiler.hooks.compilation.tap("NamedModulesPlugin", compilation => {
			compilation.hooks.beforeModuleIds.tap("NamedModulesPlugin", modules => {
				const namedModules = new Map();
				const context = this.options.context || compiler.options.context;

				for (const module of modules) {
					if (module.id === null && module.libIdent) {
						module.id = module.libIdent({ context });
					}

					if (module.id !== null) {
						const namedModule = namedModules.get(module.id);
						if (namedModule !== undefined) {
							namedModule.push(module);
						} else {
							namedModules.set(module.id, [module]);
						}
					}
				}

				for (const namedModule of namedModules.values()) {
					if (namedModule.length > 1) {
						for (const module of namedModule) {
							const requestShortener = new RequestShortener(context);
							module.id = `${module.id}?${getHash(
								requestShortener.shorten(module.identifier())
							)}`;
						}
					}
				}
			});
		});
	}
}

module.exports = NamedModulesPlugin;

Version data entries

26 entries across 25 versions & 8 rubygems

Version Path
optimacms-0.1.61 spec/dummy/node_modules/webpack/lib/NamedModulesPlugin.js
disco_app-0.18.0 test/dummy/node_modules/webpack/lib/NamedModulesPlugin.js
disco_app-0.18.2 test/dummy/node_modules/webpack/lib/NamedModulesPlugin.js
disco_app-0.16.1 test/dummy/node_modules/webpack/lib/NamedModulesPlugin.js
disco_app-0.15.2 test/dummy/node_modules/webpack/lib/NamedModulesPlugin.js
disco_app-0.18.4 test/dummy/node_modules/webpack/lib/NamedModulesPlugin.js
disco_app-0.18.1 test/dummy/node_modules/webpack/lib/NamedModulesPlugin.js
disco_app-0.12.7.pre.puma.pre.3 test/dummy/node_modules/webpack/lib/NamedModulesPlugin.js
disco_app-0.14.0 test/dummy/node_modules/webpack/lib/NamedModulesPlugin.js
disco_app-0.13.6.pre.puma.pre.3 test/dummy/node_modules/webpack/lib/NamedModulesPlugin.js
tang-0.2.1 spec/tang_app/node_modules/webpack/lib/NamedModulesPlugin.js
groonga-client-model-6.0.0 test/apps/rails6.0.3.5/node_modules/webpack/lib/NamedModulesPlugin.js
groonga-client-model-6.0.0 test/apps/rails6.1.3/node_modules/webpack/lib/NamedModulesPlugin.js
ruby2js-4.0.4 lib/tasks/testrails/node_modules/webpack/lib/NamedModulesPlugin.js
ruby2js-4.0.3 lib/tasks/testrails/node_modules/webpack/lib/NamedModulesPlugin.js
tang-0.2.0 spec/tang_app/node_modules/webpack/lib/NamedModulesPlugin.js
tang-0.1.0 spec/tang_app/node_modules/webpack/lib/NamedModulesPlugin.js
tang-0.0.9 spec/tang_app/node_modules/webpack/lib/NamedModulesPlugin.js
enju_library-0.3.8 spec/dummy/node_modules/webpack/lib/NamedModulesPlugin.js
jester-data-8.0.0 node_modules/webpack/lib/NamedModulesPlugin.js