mirror of
https://github.com/nuxt/nuxt.git
synced 2024-12-12 07:17:13 +00:00
improve CommonsChunkPlugin
inspired by zeit next
This commit is contained in:
parent
a721232173
commit
d6cb2cbc79
@ -236,6 +236,9 @@ export default class Builder extends Tapable {
|
|||||||
this.options.router.extendRoutes(templateVars.router.routes, r)
|
this.options.router.extendRoutes(templateVars.router.routes, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make routes accessible for other modules and webpack configs
|
||||||
|
this.routes = templateVars.router.routes
|
||||||
|
|
||||||
// -- Store --
|
// -- Store --
|
||||||
// Add store if needed
|
// Add store if needed
|
||||||
if (this.options.store) {
|
if (this.options.store) {
|
||||||
|
@ -31,18 +31,32 @@ export default function webpackClientConfig () {
|
|||||||
config.entry.vendor.push('vuex')
|
config.entry.vendor.push('vuex')
|
||||||
}
|
}
|
||||||
config.entry.vendor = config.entry.vendor.concat(this.options.build.vendor)
|
config.entry.vendor = config.entry.vendor.concat(this.options.build.vendor)
|
||||||
|
|
||||||
// Extract vendor chunks for better caching
|
// Extract vendor chunks for better caching
|
||||||
|
const _this = this
|
||||||
config.plugins.push(
|
config.plugins.push(
|
||||||
new webpack.optimize.CommonsChunkPlugin({
|
new webpack.optimize.CommonsChunkPlugin({
|
||||||
name: 'vendor',
|
name: 'vendor',
|
||||||
filename: this.options.build.filenames.vendor,
|
filename: this.options.build.filenames.vendor,
|
||||||
minChunks (module) {
|
minChunks (module, count) {
|
||||||
|
// In the dev we use on-demand-entries.
|
||||||
|
// So, it makes no sense to use commonChunks based on the minChunks count.
|
||||||
|
// Instead, we move all the code in node_modules into each of the pages.
|
||||||
|
if (_this.options.dev) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Total pages
|
||||||
|
const totalPages = _this.routes.length
|
||||||
|
|
||||||
// A module is extracted into the vendor chunk when...
|
// A module is extracted into the vendor chunk when...
|
||||||
return (
|
return (
|
||||||
// If it's inside node_modules
|
// If it's inside node_modules
|
||||||
/node_modules/.test(module.context) &&
|
/node_modules/.test(module.context) &&
|
||||||
// Do not externalize if the request is a CSS file
|
// Do not externalize if the request is a CSS file
|
||||||
!/\.(css|less|scss|sass|styl|stylus)$/.test(module.request)
|
!/\.(css|less|scss|sass|styl|stylus)$/.test(module.request) &&
|
||||||
|
// Used in at-least 1/2 of the total pages
|
||||||
|
(totalPages <= 2 ? count >= totalPages : count >= totalPages * 0.5)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -166,7 +166,7 @@ Options.defaults = {
|
|||||||
filenames: {
|
filenames: {
|
||||||
css: 'common.[contenthash].css',
|
css: 'common.[contenthash].css',
|
||||||
manifest: 'manifest.[hash].js',
|
manifest: 'manifest.[hash].js',
|
||||||
vendor: 'vendor.[chunkhash].js',
|
vendor: 'common.[chunkhash].js',
|
||||||
app: 'app.[chunkhash].js',
|
app: 'app.[chunkhash].js',
|
||||||
chunk: '[name].[chunkhash].js'
|
chunk: '[name].[chunkhash].js'
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user