diff options
author | Jacob Schatz <jschatz@gitlab.com> | 2018-02-02 19:21:52 +0000 |
---|---|---|
committer | Jacob Schatz <jschatz@gitlab.com> | 2018-02-02 19:21:52 +0000 |
commit | ee600a84d29d1ecbfdb3e9cb1a55c610ed65ab10 (patch) | |
tree | cd5bf2cd2d26a610d12d5fcf4d607e9528684344 /config | |
parent | a58f8c32c62bcf5824d1fe1d0de53e9bda974d65 (diff) | |
parent | 65407c3878159add9113010046b55068261fec10 (diff) | |
download | gitlab-ce-ee600a84d29d1ecbfdb3e9cb1a55c610ed65ab10.tar.gz |
Merge branch 'webpack-auto-config' into 'master'
Automatically Generate Webpack Entry Points
See merge request gitlab-org/gitlab-ce!16865
Diffstat (limited to 'config')
-rw-r--r-- | config/webpack.config.js | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/config/webpack.config.js b/config/webpack.config.js index 783677b5b8d..7f3fe551a03 100644 --- a/config/webpack.config.js +++ b/config/webpack.config.js @@ -3,6 +3,7 @@ var crypto = require('crypto'); var fs = require('fs'); var path = require('path'); +var glob = require('glob'); var webpack = require('webpack'); var StatsWriterPlugin = require('webpack-stats-plugin').StatsWriterPlugin; var CopyWebpackPlugin = require('copy-webpack-plugin'); @@ -20,6 +21,26 @@ var DEV_SERVER_LIVERELOAD = process.env.DEV_SERVER_LIVERELOAD !== 'false'; var WEBPACK_REPORT = process.env.WEBPACK_REPORT; var NO_COMPRESSION = process.env.NO_COMPRESSION; +// generate automatic entry points +var autoEntries = {}; +var pageEntries = glob.sync('pages/**/index.js', { cwd: path.join(ROOT_PATH, 'app/assets/javascripts') }); + +// filter out entries currently imported dynamically in dispatcher.js +var dispatcher = fs.readFileSync(path.join(ROOT_PATH, 'app/assets/javascripts/dispatcher.js')).toString(); +var dispatcherChunks = dispatcher.match(/(?!import\('.\/)pages\/[^']+/g); + +pageEntries.forEach(( path ) => { + let chunkPath = path.replace(/\/index\.js$/, ''); + if (!dispatcherChunks.includes(chunkPath)) { + let chunkName = chunkPath.replace(/\//g, '.'); + autoEntries[chunkName] = './' + path; + } +}); + +// report our auto-generated bundle count +var autoEntriesCount = Object.keys(autoEntries).length; +console.log(`${autoEntriesCount} entries from '/pages' automatically added to webpack output.`); + var config = { // because sqljs requires fs. node: { @@ -301,6 +322,8 @@ var config = { } } +config.entry = Object.assign({}, autoEntries, config.entry); + if (IS_PRODUCTION) { config.devtool = 'source-map'; config.plugins.push( |