A simple electron main process framework.
Einf is a simple electron main process framework, which provides some decorators and automatic dependency injection to help you simplify the main process code.
-
💉 Support dependency injection powered by Typescript decorators.
-
🪟 Support custom items injection and window object injection.
-
🔗 Automatic ipc channel binding to reduce duplication of code.
-
📦 Tiny size, the whole framework is less than 10kb.
-
💡 Simple to use, you can use it as a base framework to build your own framework.
npm i einf
# Or Yarn
yarn add einf
# Or PNPM
pnpm add einf
- Entry point of your electron application like
index.ts
:
import { BrowserWindow, app } from 'electron'
import { createEinf } from 'einf'
import { AppController } from './app.controller'
async function bootstrap() {
const window = new BrowserWindow()
window.loadURL('https://github.com')
await createEinf({
// window to create
window,
// controllers will be automatically initialized
controllers: [AppController],
// custom items to inject
injects: [{
name: 'IS_DEV',
inject: !app.isPackaged,
}],
})
}
bootstrap()
- Provide at least one controller to start the application,
app.controller.ts
:
import type { BrowserWindow } from 'electron'
import { app } from 'electron'
import { Controller, Inject, IpcHandle, IpcSend, Window } from 'einf'
import { AppService } from './app.service'
@Controller()
export class AppController {
constructor(
private appService: AppService,
@Inject('IS_DEV') private isDev: boolean,
@Window() private win: BrowserWindow,
) {}
@IpcSend('reply-msg')
public replyMsg(msg: string) {
return msg
}
@IpcHandle('send-msg')
public sendMsg(msg: string) {
console.log(msg)
return 'Get msg'
}
@IpcHandle('exit')
public exit() {
app.quit()
}
}
- You can also inject service via
@Injectable
decorator,app.service.ts
:
import { Injectable } from 'einf'
@Injectable()
export class AppService {
public createMsg(msg: string): string {
return `"${msg}" is created by app service`
}
}
- Typescript configuration:
Ensure that experimentalDecorators
and emitDecoratorMetadata
are enabled in your TypeScript configuration (such as in tsconfig.json
).
If not, you may encounter an error stating Unable to resolve signature of class decorator when called as an expression
.
{
"compilerOptions": {
// ... other options
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
MIT License © 2022 Archer Gu