Inline some CSS upfront for performance. #2167
This commit is contained in:
@@ -1,9 +1,32 @@
|
|||||||
|
/* eslint-disable react/no-danger */
|
||||||
import { Html, Head, Main, NextScript } from 'next/document';
|
import { Html, Head, Main, NextScript } from 'next/document';
|
||||||
|
|
||||||
|
import { readFileSync } from 'fs';
|
||||||
|
import { join } from 'path';
|
||||||
|
|
||||||
|
class InlineStylesHead extends Head {
|
||||||
|
getCssLinks: Head['getCssLinks'] = ({ allFiles }) => {
|
||||||
|
const { assetPrefix } = this.context;
|
||||||
|
if (!allFiles || allFiles.length === 0) return null;
|
||||||
|
return allFiles
|
||||||
|
.filter((file: any) => /\.css$/.test(file))
|
||||||
|
.map((file: any) => (
|
||||||
|
<style
|
||||||
|
key={file}
|
||||||
|
nonce={this.props.nonce}
|
||||||
|
data-href={`${assetPrefix}/_next/${file}`}
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: readFileSync(join(process.cwd(), '.next', file), 'utf-8'),
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
export default function Document() {
|
export default function Document() {
|
||||||
return (
|
return (
|
||||||
<Html lang="en">
|
<Html lang="en">
|
||||||
<Head />
|
<InlineStylesHead />
|
||||||
<body>
|
<body>
|
||||||
<Main />
|
<Main />
|
||||||
<NextScript />
|
<NextScript />
|
||||||
|
|||||||
Reference in New Issue
Block a user