Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/handtrix/next-electron-server
Server your Next.js app inside electron using a custom scheme.
https://github.com/handtrix/next-electron-server
electron nextjs react
Last synced: 3 months ago
JSON representation
Server your Next.js app inside electron using a custom scheme.
- Host: GitHub
- URL: https://github.com/handtrix/next-electron-server
- Owner: HaNdTriX
- Created: 2020-09-29T12:56:41.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-12-26T21:55:33.000Z (about 1 year ago)
- Last Synced: 2024-11-10T10:49:10.659Z (3 months ago)
- Topics: electron, nextjs, react
- Language: JavaScript
- Homepage: https://npmjs.com/package/next-electron-server
- Size: 298 KB
- Stars: 27
- Watchers: 3
- Forks: 6
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Next.js Electron Server
Serve your [Next.js](https://nextjs.org/) app inside [Electron](https://www.electronjs.org/) using a custom scheme.
## Install
```js
$ npm install next-electron-server
```or using [yarn](https://yarnpkg.com/)
```js
$ yarn add next-electron-server
```## Usage
```js
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](./example) directory.
## Motivation
Most electron tutorials recommend using a url switch to differentiate between devserver localhost urls in development and static urls used in production:
```js
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.
- The origin of the html document differs between production & development
- The security model may differ between production & development
- Paths differ between production & development
- 404 pages won't work in productionThat's why I created `next-electron-server`.
The render page will always being served using the same protocol and url.- In **development** is implements a proxy to `http://localhost:3000`.
- In **production** is serves files from the `/out` directory.## Features
- supports 404 pages
- works with Next.js dev-server
- waits for Next.j dev-server to start
- works with paths of images and other static resources
- static paths won't differ between development and production
- has zero dependencies## API
### serveNextAt(uri, options)
#### uri
_Required_\
Type: `string`\
Example: `next://app`The entry-point of your Next.js app.
#### options
Type: `object`
##### ↳ outputDir
Type: `string`\
Default: `"./out"`The directory to serve, relative to the app root directory.
##### ↳ port
Type: `number`\
Default: `3000`The port your Next.js dev-server runs on.
##### ↳ dev
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`.
##### ↳ privileges
Type: `object`
Check out [electron/docs/protocol](https://www.electronjs.org/docs/api/protocol#protocolregisterschemesasprivilegedcustomschemes) for more infos about this config object.
##### ↳ partition
Type: `string`\
Default: [`electron.session.defaultSession`](https://www.electronjs.org/docs/latest/api/session#sessiondefaultsession)The partition the protocol should be installed to, if you're not using Electron's default partition.
## Contributing
1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your own GitHub account and then [clone](https://help.github.com/articles/cloning-a-repository/) it to your local device
2. Link it to the global module directory: `yarn link`
3. Install in your local project using `yarn link next-electron-server`## Author
Henrik Wenz ([@HenrikWenz](https://twitter.com/henrikwenz))