fix(webpack): remove hmr chunks from client manifest

This commit is contained in:
Pooya Parsa 2021-02-17 20:39:02 +01:00
parent 7b3244a567
commit 64ca193ac9
2 changed files with 8 additions and 2 deletions

View File

@ -8,7 +8,7 @@ import hash from 'hash-sum'
import uniq from 'lodash/uniq' import uniq from 'lodash/uniq'
import { writeFile, mkdirp } from 'fs-extra' import { writeFile, mkdirp } from 'fs-extra'
import { isJS, isCSS } from './util' import { isJS, isCSS, isHotUpdate } from './util'
export default class VueSSRClientPlugin { export default class VueSSRClientPlugin {
options: { options: {
@ -27,19 +27,23 @@ export default class VueSSRClientPlugin {
const allFiles = uniq(stats.assets const allFiles = uniq(stats.assets
.map(a => a.name)) .map(a => a.name))
.filter(file => !isHotUpdate(file))
const initialFiles = uniq(Object.keys(stats.entrypoints) const initialFiles = uniq(Object.keys(stats.entrypoints)
.map(name => stats.entrypoints[name].assets) .map(name => stats.entrypoints[name].assets)
.reduce((files, entryAssets) => files.concat(entryAssets.map(entryAsset => entryAsset.name)), []) .reduce((files, entryAssets) => files.concat(entryAssets.map(entryAsset => entryAsset.name)), [])
.filter(file => isJS(file) || isCSS(file))) .filter(file => isJS(file) || isCSS(file)))
.filter(file => !isHotUpdate(file))
const asyncFiles = allFiles const asyncFiles = allFiles
.filter(file => isJS(file) || isCSS(file)) .filter(file => isJS(file) || isCSS(file))
.filter(file => !initialFiles.includes(file)) .filter(file => !initialFiles.includes(file))
.filter(file => !isHotUpdate(file))
const assetsMapping = {} const assetsMapping = {}
stats.assets stats.assets
.filter(({ name }) => isJS(name)) .filter(({ name }) => isJS(name))
.filter(({ name }) => !isHotUpdate(name))
.forEach(({ name, chunkNames }) => { .forEach(({ name, chunkNames }) => {
const componentHash = hash(chunkNames.join('|')) const componentHash = hash(chunkNames.join('|'))
if (!assetsMapping[componentHash]) { if (!assetsMapping[componentHash]) {
@ -69,7 +73,7 @@ export default class VueSSRClientPlugin {
return return
} }
const id = m.identifier.replace(/\s\w+$/, '') // remove appended hash const id = m.identifier.replace(/\s\w+$/, '') // remove appended hash
const filesSet = new Set(chunk.files.map(fileToIndex)) const filesSet = new Set(chunk.files.map(fileToIndex).filter(i => i !== -1))
for (const chunkName of chunk.names) { for (const chunkName of chunk.names) {
if (!entrypoints[chunkName]) { if (!entrypoints[chunkName]) {

View File

@ -30,3 +30,5 @@ export const isJS = file => isJSRegExp.test(file)
export const extractQueryPartJS = file => isJSRegExp.exec(file)[1] export const extractQueryPartJS = file => isJSRegExp.exec(file)[1]
export const isCSS = file => /\.css(\?[^.]+)?$/.test(file) export const isCSS = file => /\.css(\?[^.]+)?$/.test(file)
export const isHotUpdate = file => file.includes('hot-update')