static _createIdentifier(
		rootModule,
		modules,
		associatedObjectForCache,
		hashFunction = DEFAULTS.HASH_FUNCTION
	) {
		const cachedMakePathsRelative = makePathsRelative.bindContextCache(
			/** @type {string} */ (rootModule.context),
			associatedObjectForCache
		);
		const identifiers = [];
		for (const module of modules) {
			identifiers.push(cachedMakePathsRelative(module.identifier()));
		}
		identifiers.sort();
		const hash = createHash(hashFunction);
		hash.update(identifiers.join(" "));
		return `${rootModule.identifier()}|${hash.digest("hex")}`;
	}
@param {Module} rootModule the root module of the concatenation
@param {Set<Module>} modules all modules in the concatenation (including the root module)
@param {AssociatedObjectForCache=} associatedObjectForCache object for caching
@param {string | HashConstructor=} hashFunction hash function to use
@returns {string} the identifier