Builder config, icons and typos in README
This commit is contained in:
parent
ef7e6f5814
commit
d72137c3bd
|
@ -0,0 +1,38 @@
|
||||||
|
/**
|
||||||
|
* @type {import('electron-builder').Configuration}
|
||||||
|
* @see https://www.electron.build/configuration/configuration
|
||||||
|
*/
|
||||||
|
module.exports = {
|
||||||
|
appId: "YourAppID@qq.com",
|
||||||
|
productName: "YourAppName",
|
||||||
|
copyright: "Copyright © 2022 ${author}",
|
||||||
|
asar: true,
|
||||||
|
directories: {
|
||||||
|
output: "release/${version}",
|
||||||
|
buildResources: "build",
|
||||||
|
},
|
||||||
|
files: ["dist"],
|
||||||
|
win: {
|
||||||
|
target: [
|
||||||
|
{
|
||||||
|
target: "nsis",
|
||||||
|
arch: ["x64"],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
artifactName: "${productName}-${version}-Setup.${ext}",
|
||||||
|
},
|
||||||
|
nsis: {
|
||||||
|
oneClick: false,
|
||||||
|
perMachine: false,
|
||||||
|
allowToChangeInstallationDirectory: true,
|
||||||
|
deleteAppDataOnUninstall: false,
|
||||||
|
},
|
||||||
|
mac: {
|
||||||
|
target: ["dmg"],
|
||||||
|
artifactName: "${productName}-${version}-Installer.${ext}",
|
||||||
|
},
|
||||||
|
linux: {
|
||||||
|
target: ["AppImage"],
|
||||||
|
artifactName: "${productName}-${version}-Installer.${ext}",
|
||||||
|
},
|
||||||
|
}
|
91
README.md
91
README.md
|
@ -13,35 +13,49 @@
|
||||||
|
|
||||||
- Contains only the basic dependencies.
|
- Contains only the basic dependencies.
|
||||||
|
|
||||||
- The extend is very flexible.
|
- The extension is very flexible.
|
||||||
|
|
||||||
## Run Setup
|
## Installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# clone the project
|
# clone the project
|
||||||
git clone git@github.com:caoxiemeihao/vite-react-electron.git
|
git clone git@github.com:caoxiemeihao/vite-react-electron.git
|
||||||
|
|
||||||
# enter the project directory
|
# open the project directory
|
||||||
cd vite-react-electron
|
cd vite-react-electron
|
||||||
|
|
||||||
# install dependency
|
# install dependencies
|
||||||
npm install
|
npm install
|
||||||
|
|
||||||
# develop
|
# start the application
|
||||||
npm run dev
|
npm run dev
|
||||||
|
|
||||||
|
# make a production build
|
||||||
|
npm run build
|
||||||
```
|
```
|
||||||
|
|
||||||
## Directory
|
## Directory structure
|
||||||
|
|
||||||
Once `dev` or `build` npm-script executed will be generate named `dist` folder. It has children dir of same as `src` folder, the purpose of this design can ensure the correct path calculation.
|
Once `dev` or `build` npm-script is executed, the `dist` folder will be generated. It has the same structure as the `src` folder, the purpose of this design is to ensure the correct path calculation.
|
||||||
|
|
||||||
```tree
|
```tree
|
||||||
├
|
├
|
||||||
├── dist After build, it's generated according to the "src" directory
|
├── build Resources for the production build
|
||||||
|
├ ├── icon.icns Icon for the application on macOS
|
||||||
|
├ ├── icon.ico Icon for the application
|
||||||
|
├ ├── installerIcon.ico Icon for the application installer
|
||||||
|
├ ├── uninstallerIcon.ico Icon for the application uninstaller
|
||||||
|
├
|
||||||
|
├── dist Generated after build according to the "src" directory
|
||||||
├ ├── main
|
├ ├── main
|
||||||
├ ├── preload
|
├ ├── preload
|
||||||
├ ├── renderer
|
├ ├── renderer
|
||||||
├
|
├
|
||||||
|
├── release Generated after production build, contains executables
|
||||||
|
├ ├── {version}
|
||||||
|
├ ├── win-unpacked Contains unpacked application executable
|
||||||
|
├ ├── Setup.exe Installer for the application
|
||||||
|
├
|
||||||
├── scripts
|
├── scripts
|
||||||
├ ├── build.mjs Build script, for -> npm run build
|
├ ├── build.mjs Build script, for -> npm run build
|
||||||
├ ├── vite.config.mjs Marin-process, Preload-script vite-config
|
├ ├── vite.config.mjs Marin-process, Preload-script vite-config
|
||||||
|
@ -55,65 +69,62 @@ Once `dev` or `build` npm-script executed will be generate named `dist` folder.
|
||||||
├
|
├
|
||||||
```
|
```
|
||||||
|
|
||||||
## Use Electron, NodeJs API
|
## Use Electron and NodeJS API
|
||||||
|
|
||||||
> 🚧 By default, Electron don't support the use of API related to Electron and NodeJs in the Renderer-process, but someone still need to use it. If so, you can see the template 👉 **[electron-vite-boilerplate](https://github.com/caoxiemeihao/electron-vite-boilerplate)**
|
> 🚧 By default, Electron doesn't support the use of API related to Electron and NodeJS in the Renderer process, but someone might need to use it. If so, you can see the template 👉 **[electron-vite-boilerplate](https://github.com/caoxiemeihao/electron-vite-boilerplate)**
|
||||||
|
|
||||||
#### All Electron, NodeJs API invoke passed `Preload-script`
|
#### Invoke Electron and NodeJS API in `Preload-script`
|
||||||
|
|
||||||
* **src/preload/index.ts**
|
- **src/preload/index.ts**
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
import fs from 'fs'
|
import fs from "fs"
|
||||||
import { contextBridge, ipcRenderer } from 'electron'
|
import { contextBridge, ipcRenderer } from "electron"
|
||||||
|
|
||||||
// --------- Expose some API to Renderer-process. ---------
|
// --------- Expose some API to Renderer-process. ---------
|
||||||
contextBridge.exposeInMainWorld('fs', fs)
|
contextBridge.exposeInMainWorld("fs", fs)
|
||||||
contextBridge.exposeInMainWorld('ipcRenderer', ipcRenderer)
|
contextBridge.exposeInMainWorld("ipcRenderer", ipcRenderer)
|
||||||
```
|
```
|
||||||
|
|
||||||
* **src/renderer/src/global.d.ts**
|
- **src/renderer/src/global.d.ts**
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// Defined on the window
|
// Defined in the window
|
||||||
interface Window {
|
interface Window {
|
||||||
fs: typeof import('fs')
|
fs: typeof import("fs")
|
||||||
ipcRenderer: import('electron').IpcRenderer
|
ipcRenderer: import("electron").IpcRenderer
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
* **src/renderer/src/main.ts**
|
- **src/renderer/src/main.ts**
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
// Use Electron, NodeJs API in Renderer-process
|
// Use Electron and NodeJS API in the Renderer-process
|
||||||
console.log('fs', window.fs)
|
console.log("fs", window.fs)
|
||||||
console.log('ipcRenderer', window.ipcRenderer)
|
console.log("ipcRenderer", window.ipcRenderer)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Use SerialPort, SQLite3 or other node-native addons in Main-process
|
## Use SerialPort, SQLite3, or other node-native addons in the Main-process
|
||||||
|
|
||||||
- First, yout need to make sure the deps in "dependencies". Because the project still needs it after packaged.
|
- First, you need to make sure that the dependencies in the `package.json` are NOT in the "devDependencies". Because the project will need them after packaged.
|
||||||
|
|
||||||
- Main-process, Preload-script are also built with Vite, and they are just built as [build.lib](https://vitejs.dev/config/#build-lib).
|
- Main-process, Preload-script are also built with Vite, and they're built as [build.lib](https://vitejs.dev/config/#build-lib).
|
||||||
So they just need to configure Rollup.
|
So they just need to configure Rollup.
|
||||||
|
|
||||||
**Click to view more** 👉 [scripts/vite.config.mjs](https://github.com/caoxiemeihao/electron-vue-vite/blob/main/scripts/vite.config.mjs)
|
**Click to see more** 👉 [scripts/vite.config.mjs](https://github.com/caoxiemeihao/electron-vue-vite/blob/main/scripts/vite.config.mjs)
|
||||||
|
|
||||||
```js
|
```js
|
||||||
export default {
|
export default {
|
||||||
build: {
|
build: {
|
||||||
// built lib for Main-process, Preload-script
|
// built lib for Main-process, Preload-script
|
||||||
lib: {
|
lib: {
|
||||||
entry: 'index.ts',
|
entry: "index.ts",
|
||||||
formats: ['cjs'],
|
formats: ["cjs"],
|
||||||
fileName: () => '[name].js',
|
fileName: () => "[name].js",
|
||||||
},
|
},
|
||||||
rollupOptions: {
|
rollupOptions: {
|
||||||
// configuration here
|
// configuration here
|
||||||
external: [
|
external: ["serialport", "sqlite3"],
|
||||||
'serialport',
|
|
||||||
'sqlite3',
|
|
||||||
],
|
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -121,16 +132,16 @@ export default {
|
||||||
|
|
||||||
## `dependencies` vs `devDependencies`
|
## `dependencies` vs `devDependencies`
|
||||||
|
|
||||||
- First, you need to know if deps(npm package) are still needed after packaged.
|
- First, you need to know if your dependencies are needed after the application is packaged.
|
||||||
|
|
||||||
- Like [serialport](https://www.npmjs.com/package/serialport), [sqlite3](https://www.npmjs.com/package/sqlite3) they are node-native module and should be placed in `dependencies`. In addition, Vite will not build them, but treat them as external modules.
|
- Like [serialport](https://www.npmjs.com/package/serialport), [sqlite3](https://www.npmjs.com/package/sqlite3) they are node-native modules and should be placed in `dependencies`. In addition, Vite will not build them, but treat them as external modules.
|
||||||
|
|
||||||
- Like [vue](https://www.npmjs.com/package/vue), [react](https://www.npmjs.com/package/react) they are pure javascript module and can be built with Vite, so they can be placed in `devDependencies`. This reduces the volume of the built project.
|
- Dependencies like [Vue](https://www.npmjs.com/package/vue) and [React](https://www.npmjs.com/package/react), which are pure javascript modules that can be built with Vite, can be placed in `devDependencies`. This reduces the size of the application.
|
||||||
|
|
||||||
## Shown
|
## Result
|
||||||
|
|
||||||
<img width="400px" src="https://raw.githubusercontent.com/caoxiemeihao/blog/main/vite-react-electron/react-win.png" />
|
<img width="400px" src="https://raw.githubusercontent.com/caoxiemeihao/blog/main/vite-react-electron/react-win.png" />
|
||||||
|
|
||||||
## Wechat group
|
## WeChat group
|
||||||
|
|
||||||
<img width="244px" src="https://raw.githubusercontent.com/caoxiemeihao/blog/main/assets/wechat/group/qrcode.jpg" />
|
<img width="244px" src="https://raw.githubusercontent.com/caoxiemeihao/blog/main/assets/wechat/group/qrcode.jpg" />
|
||||||
|
|
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 36 KiB |
Binary file not shown.
After Width: | Height: | Size: 36 KiB |
Binary file not shown.
After Width: | Height: | Size: 36 KiB |
|
@ -1,33 +0,0 @@
|
||||||
{
|
|
||||||
"appId": "YouAppID@qq.com",
|
|
||||||
"asar": true,
|
|
||||||
"directories": {
|
|
||||||
"output": "release/${version}"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"dist"
|
|
||||||
],
|
|
||||||
"mac": {
|
|
||||||
"artifactName": "${productName}_${version}.${ext}",
|
|
||||||
"target": [
|
|
||||||
"dmg"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"win": {
|
|
||||||
"target": [
|
|
||||||
{
|
|
||||||
"target": "nsis",
|
|
||||||
"arch": [
|
|
||||||
"x64"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"artifactName": "${productName}_${version}.${ext}"
|
|
||||||
},
|
|
||||||
"nsis": {
|
|
||||||
"oneClick": false,
|
|
||||||
"perMachine": false,
|
|
||||||
"allowToChangeInstallationDirectory": true,
|
|
||||||
"deleteAppDataOnUninstall": false
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -7,7 +7,7 @@
|
||||||
"main": "dist/main/index.cjs",
|
"main": "dist/main/index.cjs",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "node scripts/watch.mjs",
|
"dev": "node scripts/watch.mjs",
|
||||||
"build": "tsc --project src/renderer/tsconfig.json && node scripts/build.mjs && electron-builder"
|
"build": "tsc --project src/renderer/tsconfig.json && node scripts/build.mjs && electron-builder --config .electron-builder.config.js"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=14.17.0"
|
"node": ">=14.17.0"
|
||||||
|
|
Loading…
Reference in New Issue