Skip to content

Commit a724f7c

Browse files
authored
Merge pull request #260 from timlrx/feat/hmr
feat: add custom next-remote-watch
2 parents 82e74ba + cc2ecb1 commit a724f7c

File tree

5 files changed

+355
-1
lines changed

5 files changed

+355
-1
lines changed

components/ClientReload.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { useEffect } from 'react'
2+
import Router from 'next/router'
3+
4+
/**
5+
* Client-side complement to next-remote-watch
6+
* Re-triggers getStaticProps when watched mdx files change
7+
*
8+
*/
9+
export const ClientReload = () => {
10+
// Exclude socket.io from prod bundle
11+
useEffect(() => {
12+
import('socket.io-client').then((module) => {
13+
const socket = module.io()
14+
socket.on('reload', (data) => {
15+
Router.replace(Router.asPath, undefined, {
16+
scroll: false,
17+
})
18+
})
19+
})
20+
}, [])
21+
22+
return null
23+
}

package-lock.json

Lines changed: 205 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"version": "1.1.2",
44
"private": true,
55
"scripts": {
6-
"start": "next-remote-watch ./data",
6+
"start": "node ./scripts/next-remote-watch.js ./data",
77
"dev": "next dev",
88
"build": "next build && node ./scripts/generate-sitemap",
99
"serve": "next start",
@@ -56,6 +56,8 @@
5656
"inquirer": "^8.1.1",
5757
"lint-staged": "^11.0.0",
5858
"next-remote-watch": "^1.0.0",
59+
"socket.io": "^4.1.3",
60+
"socket.io-client": "^4.1.3",
5961
"prettier": "2.2.1"
6062
},
6163
"lint-staged": {

pages/_app.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@ import Head from 'next/head'
66

77
import Analytics from '@/components/analytics'
88
import LayoutWrapper from '@/components/LayoutWrapper'
9+
import { ClientReload } from '@/components/ClientReload'
10+
11+
const isDevelopment = process.env.NODE_ENV === 'development'
912

1013
export default function App({ Component, pageProps }) {
1114
return (
1215
<ThemeProvider attribute="class">
1316
<Head>
1417
<meta content="width=device-width, initial-scale=1" name="viewport" />
1518
</Head>
19+
{isDevelopment && <ClientReload />}
1620
<Analytics />
1721
<LayoutWrapper>
1822
<Component {...pageProps} />

0 commit comments

Comments
 (0)