Serve your Next.js app inside Electron using a custom scheme.
$ npm install next-electron-server
or using yarn
$ yarn add next-electron-server
const serveNextAt = require("next-electron-server");
serveNextAt("next://app");
app.on("ready", async () => {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
});
mainWindow.loadURL("next://app");
// mainWindow.loadURL("next://app/page1");
// mainWindow.loadURL("next://app/page2");
});
For more infos check out the example directory.
Most electron tutorials recommend using a url switch to differentiate between devserver localhost urls in development and static urls used in production:
app.on("ready", async () => {
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
});
const url = isDev
? "http://localhost:8000"
: format({
pathname: join(__dirname, "../renderer/out/index.html"),
protocol: "file:",
slashes: true,
});
mainWindow.loadURL(url);
});
From my point of view this approach has many drawbacks.
That's why I created next-electron-server
.
The render page will always being served using the same protocol and url.
http://localhost:3000
./out
directory.Required\
Type: string
\
Example: next://app
The entry-point of your Next.js app.
Type: object
Type: string
\
Default: "./out"
The directory to serve, relative to the app root directory.
Type: number
\
Default: 3000
The port your Next.js dev-server runs on.
Type: boolean
\
Default !app.isPackaged
This flag decides how to serve the files. When dev === true
a proxy will be created pointing to localhost:3000
.
Type: object
Check out electron/docs/protocol for more infos about this config object.
Type: string
\
Default: electron.session.defaultSession
The partition the protocol should be installed to, if you're not using Electron's default partition.
yarn link
yarn link next-electron-server
Henrik Wenz (@HenrikWenz)