diff --git a/lib/ChunkGraph.js b/lib/ChunkGraph.js index 48494895318..b79902ae9a3 100644 --- a/lib/ChunkGraph.js +++ b/lib/ChunkGraph.js @@ -6,6 +6,7 @@ "use strict"; const util = require("util"); +const ModuleGraphConnection = require("./ModuleGraphConnection"); const SortableSet = require("./util/SortableSet"); const { compareModulesById, @@ -272,10 +273,19 @@ class ChunkGraph { findGraphRoots(set, module => { /** @type {Set} */ const set = new Set(); - for (const connection of moduleGraph.getOutgoingConnections(module)) { - if (!connection.module) continue; - set.add(connection.module); - } + const addDependencies = module => { + for (const connection of moduleGraph.getOutgoingConnections(module)) { + if (!connection.module) continue; + const activeState = connection.getActiveState(undefined); + if (activeState === false) continue; + if (activeState === ModuleGraphConnection.TRANSITIVE_ONLY) { + addDependencies(connection.module); + continue; + } + set.add(connection.module); + } + }; + addDependencies(module); return set; }) ).sort(compareModulesByIdentifier); diff --git a/lib/ids/IdHelpers.js b/lib/ids/IdHelpers.js index b9958b4a062..e5e2be5f25d 100644 --- a/lib/ids/IdHelpers.js +++ b/lib/ids/IdHelpers.js @@ -77,9 +77,14 @@ const shortenLongString = (string, delimiter) => { * @returns {string} short module name */ const getShortModuleName = (module, context, associatedObjectForCache) => { - return avoidNumber( - module.libIdent({ context, associatedObjectForCache }) || "" - ); + const libIdent = module.libIdent({ context, associatedObjectForCache }); + if (libIdent) return avoidNumber(libIdent); + const nameForCondition = module.nameForCondition(); + if (nameForCondition) + return avoidNumber( + makePathsRelative(context, nameForCondition, associatedObjectForCache) + ); + return ""; }; exports.getShortModuleName = getShortModuleName; diff --git a/test/configCases/plugins/mini-css-extract-plugin/chunk.js b/test/configCases/plugins/mini-css-extract-plugin/chunk.js index c7300ee6e93..a39adf003eb 100644 --- a/test/configCases/plugins/mini-css-extract-plugin/chunk.js +++ b/test/configCases/plugins/mini-css-extract-plugin/chunk.js @@ -1 +1,3 @@ import "./chunk.css"; + +export default 42; diff --git a/test/configCases/plugins/mini-css-extract-plugin/webpack.config.js b/test/configCases/plugins/mini-css-extract-plugin/webpack.config.js index 37397dd2494..b04b470d415 100644 --- a/test/configCases/plugins/mini-css-extract-plugin/webpack.config.js +++ b/test/configCases/plugins/mini-css-extract-plugin/webpack.config.js @@ -5,7 +5,8 @@ module.exports = { entry: { a: "./a", b: "./b", - c: "./c.css" + c: "./c.css", + x: "./x" // also imports chunk but with different exports }, output: { filename: "[name].js" @@ -18,9 +19,32 @@ module.exports = { } ] }, + optimization: { + chunkIds: "named" + }, target: "web", node: { __dirname: false }, - plugins: [new MCEP()] + plugins: [ + new MCEP(), + compiler => { + compiler.hooks.done.tap("Test", stats => { + const chunkIds = stats + .toJson({ all: false, chunks: true, ids: true }) + .chunks.map(c => c.id) + .sort(); + expect(chunkIds).toEqual([ + "a", + "b", + "c", + "chunk_js-_43b60", + "chunk_js-_43b61", + "chunk_js-_43b62", + "d_css", + "x" + ]); + }); + } + ] }; diff --git a/test/configCases/plugins/mini-css-extract-plugin/x.js b/test/configCases/plugins/mini-css-extract-plugin/x.js new file mode 100644 index 00000000000..0c441475d80 --- /dev/null +++ b/test/configCases/plugins/mini-css-extract-plugin/x.js @@ -0,0 +1 @@ +import(/* webpackExports: [] */ "./chunk");