Coder Social home page Coder Social logo

ringozzt / electron-vite-vue Goto Github PK

View Code? Open in Web Editor NEW

This project forked from electron-vite/electron-vite-vue

1.0 0.0 0.0 13.17 MB

๐Ÿฅณ Real simple Electron + Vite + Vue boilerplate.

License: MIT License

HTML 3.31% Vue 16.94% TypeScript 58.02% JavaScript 16.49% Dockerfile 5.24%

electron-vite-vue's Introduction

electron-vite-vue

awesome-vite GitHub license GitHub stars GitHub forks

English | ็ฎ€ไฝ“ไธญๆ–‡

๐Ÿฅณ Real simple Electron + Vue + Vite boilerplate.

Quick Start

# clone the project
git clone https://github.com/caoxiemeihao/electron-vite-vue.git

# enter the project directory
cd electron-vite-vue

# install dependency
npm install

# develop
npm run dev

quick-start

Another way is by scaffolding started

npm create electron-vite

Overview

This is a Vite-integrated Electron template built with simplification in mind.

The repo contains only the most basic files, dependencies and functionalities to ensure flexibility for various scenarios.

You need a basic understanding of Electron and Vite to get started. But that's not mandatory - you can learn almost all the details by reading through the source code. Trust me, this repo is not that complex. ๐Ÿ˜‹

Directory

A dist folder will be generated everytime when dev or build command is executed. File structure of dist is identical to the packages directory to avoid any potential path calculation errors.

โ”œ
โ”œโ”€โ”€ dist                      Will be generated following the structure of "packages" directory
โ”œ   โ”œโ”€โ”€ main
โ”œ   โ”œโ”€โ”€ preload
โ”œ   โ”œโ”€โ”€ renderer
โ”œ
โ”œโ”€โ”€ scripts
โ”œ   โ”œโ”€โ”€ build.mjs             Build script -> npm run build
โ”œ   โ”œโ”€โ”€ watch.mjs             Develop script -> npm run dev
โ”œ
โ”œโ”€โ”€ packages
โ”œ   โ”œโ”€โ”€ main                  Main-process source code
โ”œ       โ”œโ”€โ”€ vite.config.ts
โ”œ   โ”œโ”€โ”€ preload               Preload-script source code
โ”œ       โ”œโ”€โ”€ vite.config.ts
โ”œ   โ”œโ”€โ”€ renderer              Renderer-process source code
โ”œ       โ”œโ”€โ”€ vite.config.ts
โ”œ

dependencies vs devDependencies

  • First, you need to know if the package is still needed at runtime after packed.

  • Packages like serialport, sqlite3 are node-native modules and should be placed in dependencies. Vite will not build them and will treat them as externals.

  • Packages like vue, react are pure javascript modules and can be built with Vite. They can be listed in devDependencies which helps reducing the size of bundled product.

Use Electron, NodeJs API

๐Ÿšง Due to electron security constraints, using Electron or NodeJS API in the rederer process is strongly discouraged.

The template provides two methods for using the NodeJs API in the rendering process:

  1. Bypass the security constraints (default), located in the main branch. nodeIntegration is enabled by default, making it easy to use.:tada:, but there are certain security risks ๐Ÿšง.
  2. Inject Render by preload script, located in the withoutNodeIntegration branch. nodeIntegration is turned off by default, the official recommended way of electron, more secure:lock:.

For 1, all NodeJs and Electron APIs can be used directly in the rendering process.

For 2, all NodeJs, Electron APIs injected into the rendering process via Preload-script

you need to create a context bridge and expose the APIs you need to the renderer process.

Note that if your project uses typescript, you also need to add type declarations to the Window interface, for example:

  • packages/preload/index.ts

    import fs from 'fs'
    import { contextBridge, ipcRenderer } from 'electron'
    
    // --------- Expose some API to Renderer-process. ---------
    contextBridge.exposeInMainWorld('fs', fs)
    contextBridge.exposeInMainWorld('ipcRenderer', ipcRenderer)
  • packages/renderer/src/global.d.ts

    // Defined on the window
    interface Window {
      fs: typeof import('fs')
      ipcRenderer: import('electron').IpcRenderer
    }
  • packages/renderer/src/main.ts

    // Use Electron, NodeJs API in Renderer-process
    console.log('fs', window.fs)
    console.log('ipcRenderer', window.ipcRenderer)

Finally, either way, for third-party NodeJs APIs (e.g. sqlite3), You'll also need to declare how it was imported in packages/renderer/vite.config.ts defineConfig.plugins so that the template can recognize them correctly. ๐Ÿ‘‰ reference issues resolveElectron

Use SerialPort, SQLite3 or other node-native addons in Main-process

  • First, you need to make sure the packages are listed in the "dependencies" since they are still needed at runtime after the project is packed.

  • Source code of main process and preload scripts are also bundled with Vitebuild.lib. Rollup configurations needed.

More: ๐Ÿ‘‰ packages/main/vite.config.ts

export default {
  build: {
    // built lib for Main-process, Preload-script
    lib: {
      entry: 'index.ts',
      formats: ['cjs'],
      fileName: () => '[name].js',
    },
    rollupOptions: {
      // configuration here
      external: [
        'serialport',
        'sqlite3',
      ],
    },
  },
}

Main window

่ฏทๆˆ‘ๅ–ๆฏไธ‹ๅˆ่Œถ ๐Ÿฅณ

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.