11const computePath = require ( './utils' ) . computePath
2+ const withPrefresh = require ( '@prefresh/next' )
23
3- module . exports = {
4- webpack ( config , options ) {
4+ const config = {
5+ experimental : {
6+ modern : true ,
7+ polyfillsOptimization : true ,
8+ } ,
9+
10+ webpack ( config , { dev, isServer } ) {
511 const esLintRule = {
612 test : / \. t s x $ / ,
713 enforce : 'pre' ,
814 exclude : [ '/node_modules/' , '/.next/' ] ,
9- loader : 'eslint-loader'
15+ loader : 'eslint-loader' ,
1016 }
1117 config . module . rules . push ( esLintRule )
1218
@@ -24,6 +30,41 @@ module.exports = {
2430 utils : computePath ( './src/utils' )
2531 }
2632
33+ // Preact stuff
34+ const splitChunks = config . optimization && config . optimization . splitChunks
35+ if ( splitChunks ) {
36+ const cacheGroups = splitChunks . cacheGroups
37+ const preactModules = / [ \\ / ] n o d e _ m o d u l e s [ \\ / ] ( p r e a c t | p r e a c t - r e n d e r - t o - s t r i n g | p r e a c t - c o n t e x t - p r o v i d e r ) [ \\ / ] /
38+ if ( cacheGroups . framework ) {
39+ cacheGroups . preact = Object . assign ( { } , cacheGroups . framework , {
40+ test : preactModules ,
41+ } )
42+ cacheGroups . commons . name = 'framework'
43+ } else {
44+ cacheGroups . preact = {
45+ name : 'commons' ,
46+ chunks : 'all' ,
47+ test : preactModules ,
48+ }
49+ }
50+ }
51+
52+ // Install webpack aliases:
53+ const aliases = config . resolve . alias || ( config . resolve . alias = { } )
54+ aliases . react = aliases [ 'react-dom' ] = 'preact/compat'
55+
56+ // inject Preact DevTools
57+ if ( dev && ! isServer ) {
58+ const entry = config . entry
59+ config . entry = ( ) =>
60+ entry ( ) . then ( entries => {
61+ entries [ 'main.js' ] = [ 'preact/debug' ] . concat ( entries [ 'main.js' ] || [ ] )
62+ return entries
63+ } )
64+ }
65+
2766 return config
28- }
67+ } ,
2968}
69+
70+ module . exports = withPrefresh ( config )
0 commit comments