UNPKG

1.13 kBJavaScriptView Raw
1const { optimize, NamedChunksPlugin, NamedModulesPlugin } = require('webpack');
2const NameAllModulesPlugin = require('name-all-modules-plugin');
3const { createHash } = require('crypto');
4const { relative } = require('path');
5
6const hash = value => createHash('md5').update(value).digest('hex');
7
8module.exports = ({ config }) => config
9 .plugin('named-modules')
10 .use(NamedModulesPlugin)
11 .end()
12 .plugin('named-chunks')
13 .use(NamedChunksPlugin, [
14 chunk => (
15 chunk.name ||
16 hash(chunk.modules.map(({ context, request }) => relative(context || '', request || '')).join('_'))
17 )
18 ])
19 .end()
20 // When other middleware uses this chunk middleware, the names in use by default here
21 // need to be kept in sync with the additional values used there.
22 // Currently "vendor" and "runtime" as defined below.
23 .plugin('vendor-chunk')
24 .use(optimize.CommonsChunkPlugin, [{
25 name: 'vendor',
26 minChunks: Infinity
27 }])
28 .end()
29 .plugin('runtime-chunk')
30 .use(optimize.CommonsChunkPlugin, [{ name: 'runtime' }])
31 .end()
32 .plugin('name-all')
33 .use(NameAllModulesPlugin);