未验证 提交 2e32aa86 编写于 作者: J Joe Haddad 提交者: GitHub

Ensure correct key order (#6616)

* Ensure correct key order

* Fix bug

* Format this document while we're at it
上级 179d09e8
import { RawSource } from 'webpack-sources'
import { BUILD_MANIFEST, ROUTE_NAME_REGEX, IS_BUNDLED_PAGE_REGEX, CLIENT_STATIC_FILES_RUNTIME_MAIN } from 'next-server/constants'
import {
BUILD_MANIFEST,
ROUTE_NAME_REGEX,
IS_BUNDLED_PAGE_REGEX,
CLIENT_STATIC_FILES_RUNTIME_MAIN
} from 'next-server/constants'
// This plugin creates a build-manifest.json for all assets that are being output
// It has a mapping of "entry" filename to real filename. Because the real filename can be hashed in production
export default class BuildManifestPlugin {
apply (compiler) {
compiler.hooks.emit.tapAsync('NextJsBuildManifest', (compilation, callback) => {
compiler.hooks.emit.tapAsync(
'NextJsBuildManifest',
(compilation, callback) => {
const { chunks } = compilation
const assetMap = { devFiles: [], pages: {} }
const mainJsChunk = chunks.find((c) => c.name === CLIENT_STATIC_FILES_RUNTIME_MAIN)
const mainJsFiles = mainJsChunk && mainJsChunk.files.length > 0 ? mainJsChunk.files.filter((file) => /\.js$/.test(file)) : []
const mainJsChunk = chunks.find(
c => c.name === CLIENT_STATIC_FILES_RUNTIME_MAIN
)
const mainJsFiles =
mainJsChunk && mainJsChunk.files.length > 0
? mainJsChunk.files.filter(file => /\.js$/.test(file))
: []
for (const filePath of Object.keys(compilation.assets)) {
const path = filePath.replace(/\\/g, '/')
......@@ -58,7 +70,10 @@ export default class BuildManifestPlugin {
}
}
assetMap.pages[`/${pagePath.replace(/\\/g, '/')}`] = [...filesForEntry, ...mainJsFiles]
assetMap.pages[`/${pagePath.replace(/\\/g, '/')}`] = [
...filesForEntry,
...mainJsFiles
]
}
if (typeof assetMap.pages['/index'] !== 'undefined') {
......@@ -67,10 +82,14 @@ export default class BuildManifestPlugin {
assetMap.pages = Object.keys(assetMap.pages)
.sort()
.reduce((a, c) => Object.assign(a, { [c]: assetMap.pages[c] }), {})
// eslint-disable-next-line
.reduce((a, c) => ((a[c] = assetMap.pages[c]), a), {})
compilation.assets[BUILD_MANIFEST] = new RawSource(JSON.stringify(assetMap, null, 2))
compilation.assets[BUILD_MANIFEST] = new RawSource(
JSON.stringify(assetMap, null, 2)
)
callback()
})
}
)
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册