summaryrefslogtreecommitdiff
path: root/config
diff options
context:
space:
mode:
authorJacob Schatz <jschatz@gitlab.com>2018-01-08 18:44:12 +0000
committerJacob Schatz <jschatz@gitlab.com>2018-01-08 18:44:12 +0000
commit1d7b46062feb1d93dd3efaf6ba4d5d934068342c (patch)
tree3f5ea87d9f2e043075b5746b56c8da26fce4cbd0 /config
parent73ee4770ddd91063406a8f961feeb4a2f62d4a9a (diff)
parent6d1548f86922d2489fd601c725a9748e3e563216 (diff)
downloadgitlab-ce-1d7b46062feb1d93dd3efaf6ba4d5d934068342c.tar.gz
Merge branch 'winh-webpack-concatenated-module' into 'master'
Fix Webpack config for ConcatenatedModule Closes #41649 See merge request gitlab-org/gitlab-ce!16219
Diffstat (limited to 'config')
-rw-r--r--config/webpack.config.js30
1 files changed, 25 insertions, 5 deletions
diff --git a/config/webpack.config.js b/config/webpack.config.js
index 5f95255334c..95fa79990e2 100644
--- a/config/webpack.config.js
+++ b/config/webpack.config.js
@@ -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 moduleNames = [];
+
+ function collectModuleNames(m) {
+ // handle ConcatenatedModule which does not have resource nor context set
+ if (m.modules) {
+ m.modules.forEach(collectModuleNames);
+ return;
+ }
+
const pagesBase = path.join(ROOT_PATH, 'app/assets/javascripts/pages');
+
if (m.resource.indexOf(pagesBase) === 0) {
- return path.relative(pagesBase, m.resource)
+ moduleNames.push(path.relative(pagesBase, m.resource)
.replace(/\/index\.[a-z]+$/, '')
- .replace(/\//g, '__');
+ .replace(/\//g, '__'));
+ } else {
+ moduleNames.push(path.relative(m.context, m.resource));
}
- return path.relative(m.context, m.resource);
- }).join('_');
+ }
+
+ 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