Fix Webpack config for ConcatenatedModule

This commit is contained in:
Winnie Hellmann 2018-01-03 14:51:32 +01:00
parent b1e1990ee2
commit 6d1548f869
1 changed files with 28 additions and 8 deletions

View File

@ -1,5 +1,6 @@
'use strict';
var crypto = require('crypto');
var fs = require('fs');
var path = require('path');
var webpack = require('webpack');
@ -179,15 +180,34 @@ var config = {
if (chunk.name) {
return chunk.name;
}
return chunk.mapModules((m) => {
const pagesBase = path.join(ROOT_PATH, 'app/assets/javascripts/pages');
if (m.resource.indexOf(pagesBase) === 0) {
return path.relative(pagesBase, m.resource)
.replace(/\/index\.[a-z]+$/, '')
.replace(/\//g, '__');
const moduleNames = [];
function collectModuleNames(m) {
// handle ConcatenatedModule which does not have resource nor context set
if (m.modules) {
m.modules.forEach(collectModuleNames);
return;
}
return path.relative(m.context, m.resource);
}).join('_');
const pagesBase = path.join(ROOT_PATH, 'app/assets/javascripts/pages');
if (m.resource.indexOf(pagesBase) === 0) {
moduleNames.push(path.relative(pagesBase, m.resource)
.replace(/\/index\.[a-z]+$/, '')
.replace(/\//g, '__'));
} else {
moduleNames.push(path.relative(m.context, m.resource));
}
}
chunk.forEachModule(collectModuleNames);
const hash = crypto.createHash('sha256')
.update(moduleNames.join('_'))
.digest('hex');
return `${moduleNames[0]}-${hash.substr(0, 6)}`;
}),
// create cacheable common library bundle for all vue chunks