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
@@ -22,6 +28,41 @@ module.exports = {
2228 utils : computePath ( './src/utils' )
2329 }
2430
31+ // Preact stuff
32+ const splitChunks = config . optimization && config . optimization . splitChunks
33+ if ( splitChunks ) {
34+ const cacheGroups = splitChunks . cacheGroups
35+ 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 ) [ \\ / ] /
36+ if ( cacheGroups . framework ) {
37+ cacheGroups . preact = Object . assign ( { } , cacheGroups . framework , {
38+ test : preactModules ,
39+ } )
40+ cacheGroups . commons . name = 'framework'
41+ } else {
42+ cacheGroups . preact = {
43+ name : 'commons' ,
44+ chunks : 'all' ,
45+ test : preactModules ,
46+ }
47+ }
48+ }
49+
50+ // Install webpack aliases:
51+ const aliases = config . resolve . alias || ( config . resolve . alias = { } )
52+ aliases . react = aliases [ 'react-dom' ] = 'preact/compat'
53+
54+ // inject Preact DevTools
55+ if ( dev && ! isServer ) {
56+ const entry = config . entry
57+ config . entry = ( ) =>
58+ entry ( ) . then ( entries => {
59+ entries [ 'main.js' ] = [ 'preact/debug' ] . concat ( entries [ 'main.js' ] || [ ] )
60+ return entries
61+ } )
62+ }
63+
2564 return config
26- }
65+ } ,
2766}
67+
68+ module . exports = withPrefresh ( config )
0 commit comments