import fs from 'fs'; import Document, { Html, Head, Main, NextScript } from 'next/document'; import { CustomJavascript, CustomHtml, Favicon } from '~/elements'; import favicons from '../favicon-formats'; import type { DocumentContext, DocumentInitialProps } from 'next/document'; interface DocumentExtra extends DocumentInitialProps { customJs: string; customHtml: string; } class MyDocument extends Document { static async getInitialProps(ctx: DocumentContext): Promise { const initialProps = await Document.getInitialProps(ctx); let customJs = '', customHtml = ''; if (fs.existsSync('custom.js')) { customJs = fs.readFileSync('custom.js').toString(); } if (fs.existsSync('custom.html')) { customHtml = fs.readFileSync('custom.html').toString(); } return { customJs, customHtml, ...initialProps }; } render(): JSX.Element { return ( {favicons.map((favicon, idx) => ( ))} {this.props.customJs}
{this.props.customHtml} ); } } export default MyDocument;