mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
57a0fc432c
* Speed up next build * Document webpack config * Speed up next build * Remove comment * Add comment * Clean up rules * Add comments * Run in parallel * Push plugins seperately * Create a new chunk for react * Don’t uglify react since it’s already uglified. Move react to commons in development * Use the minified version directly * Re-add globpattern * Move loaders into a separate variable * Add comment linking to Dan’s explanation * Remove dot
34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
import { ConcatSource } from 'webpack-sources'
|
|
|
|
// This plugin combines a set of assets into a single asset
|
|
// This should be only used with text assets,
|
|
// otherwise the result is unpredictable.
|
|
export default class CombineAssetsPlugin {
|
|
constructor ({ input, output }) {
|
|
this.input = input
|
|
this.output = output
|
|
}
|
|
|
|
apply (compiler) {
|
|
compiler.plugin('compilation', (compilation) => {
|
|
// This is triggered after uglify and other optimizers have ran.
|
|
compilation.plugin('after-optimize-chunk-assets', (chunks) => {
|
|
const concat = new ConcatSource()
|
|
|
|
this.input.forEach((name) => {
|
|
const asset = compilation.assets[name]
|
|
if (!asset) return
|
|
|
|
// We add each matched asset from this.input to a new bundle
|
|
concat.add(asset)
|
|
// The original assets are kept because they show up when analyzing the bundle using webpack-bundle-analyzer
|
|
// See https://github.com/zeit/next.js/tree/canary/examples/with-webpack-bundle-analyzer
|
|
})
|
|
|
|
// Creates a new asset holding the concatted source
|
|
compilation.assets[this.output] = concat
|
|
})
|
|
})
|
|
}
|
|
}
|