Skip to content

Instantly share code, notes, and snippets.

@kamiyam
Last active June 25, 2020 12:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kamiyam/dba7f1c9c0d4699cad6cd77f0b9642a2 to your computer and use it in GitHub Desktop.
Save kamiyam/dba7f1c9c0d4699cad6cd77f0b9642a2 to your computer and use it in GitHub Desktop.
Next.js and Custom Server

Refs.

// next.config.js

const withPreFresh = require("@prefresh/next");

module.exports = withPreFresh({
  webpack(config, { dev, isServer }) {
    config.resolve.alias = {
      ...config.resolve.alias,
      "@styles": path.resolve(__dirname, "./styles"),
      "react": "preact/compat",
      "react-dom": "preact/compat"
    };
    // Move Preact into the framework chunk instead of duplicating in routes:
    const splitChunks = config.optimization && config.optimization.splitChunks
    if (splitChunks) {
      const cacheGroups = splitChunks.cacheGroups
      const test = /[\\/]node_modules[\\/](preact|preact-render-to-string|preact-context-provider)[\\/]/
      if (cacheGroups.framework) {
        cacheGroups.preact = Object.assign({}, cacheGroups.framework, { test })
        // if you want to merge the 2 small commons+framework chunks:
        // cacheGroups.commons.name = "framework";
      }
    }

    // Install webpack aliases:
    const aliases = config.resolve.alias || (config.resolve.alias = {})
    aliases.react = aliases["react-dom"] = "preact/compat"

    // Automatically inject Preact DevTools:
    if (dev && !isServer) {
      const entry = config.entry
      config.entry = () =>
        entry().then((entries) => {
          entries["main.js"] = ["preact/debug"].concat(entries["main.js"] || [])
          return entries
        })
    }

    return config
  }
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment