|
1 | | -# Vite Electron Builder Boilerplate v2 |
| 1 | +# Simple markdown editor |
2 | 2 |
|
3 | | -[](https://github.com/cawa-93/vite-electron-builder/issues?q=label%3A%22help+wanted%22+is%3Aopen+is%3Aissue) |
4 | | -[](https://nodejs.org/about/releases/) |
5 | | -[](https://github.com/npm/cli/releases) |
| 3 | +Simple markdown editor app made using Electron. |
6 | 4 |
|
7 | | -> Vite+Electron = 🔥 |
| 5 | +Tecnologies used: |
8 | 6 |
|
9 | | -This is a secure template for electron applications. Written following the latest safety requirements, recommendations and best practices. |
| 7 | +- Electron |
| 8 | +- Vue.js |
| 9 | +- Rust + Wasm |
| 10 | +- Tailwindcss |
| 11 | +- Vite |
10 | 12 |
|
11 | | -Under the hood is used [Vite] — super fast, nextgen bundler, and [electron-builder] for compilation. |
| 13 | +For latest build plesae check [releases](https://github.com/hello-efficiency-inc/markvue/releases) page. |
12 | 14 |
|
| 15 | +License: |
13 | 16 |
|
14 | | -___ |
15 | | -### Support |
16 | | -- This template maintained by [Alex Kozack][cawa-93-github]. You can [💖 sponsor him][cawa-93-sponsor] for continued development of this template. |
17 | | - |
18 | | -- Found a problem? Pull requests are welcome. |
19 | | - |
20 | | -- If you have ideas, questions or suggestions - **Welcome to [discussions](https://github.com/cawa-93/vite-electron-builder/discussions)**. 😊 |
21 | | -___ |
22 | | - |
23 | | - |
24 | | - |
25 | | - |
26 | | -## Get started |
27 | | - |
28 | | -Follow these steps to get started with this template: |
29 | | - |
30 | | -1. Click the **[Use this template](https://github.com/cawa-93/vite-electron-builder/generate)** button (you must be logged in) or just clone this repo. |
31 | | -2. If you want use another package manager don't forget edit [`.github/workflows`](/.github/workflows) -- it uses `npm` by default. |
32 | | - |
33 | | -That's all you need. 😉 |
34 | | - |
35 | | -**Note**: This template uses npm v7 feature — [**Installing Peer Dependencies Automatically**](https://github.com/npm/rfcs/blob/latest/implemented/0025-install-peer-deps.md). If you are using a different package manager, you may need to install some peerDependencies manually. |
36 | | - |
37 | | - |
38 | | - |
39 | | - |
40 | | -## Features |
41 | | - |
42 | | -### Electron [][electron] |
43 | | -- Template use the latest electron version with all the latest security patches. |
44 | | -- The architecture of the application is built according to the security [guids](https://www.electronjs.org/docs/tutorial/security) and best practices. |
45 | | -- The latest version of the [electron-builder] is used to compile the application. |
46 | | - |
47 | | - |
48 | | -### Vite [][vite] |
49 | | -- [Vite] is used to bundle all source codes. This is an extremely fast packer that has a bunch of great features. You can learn more about how it is arranged in [this](https://youtu.be/xXrhg26VCSc) video. |
50 | | -- Vite [supports](https://vitejs.dev/guide/env-and-mode.html) reading `.env` files. You can also specify types of your environment variables in [`types/vite-env.d.ts`](types/vite-env.d.ts). |
51 | | - |
52 | | -Vite provides you with many useful features, such as: `TypeScript`, `TSX/JSX`, `CSS/JSON Importing`, `CSS Modules`, `Web Assembly` and much more. |
53 | | - |
54 | | -[See all Vite features](https://vitejs.dev/guide/features.html). |
55 | | - |
56 | | - |
57 | | -### TypeScript [][typescript] (optional) |
58 | | -- The Latest TypeScript is used for all source code. |
59 | | -- **Vite** supports TypeScript out of the box. However, it does not support type checking. |
60 | | -- Code formatting rules follow the latest TypeScript recommendations and best practices thanks to [@typescript-eslint/eslint-plugin](https://www.npmjs.com/package/@typescript-eslint/eslint-plugin). |
61 | | - |
62 | | -**[See this discussion](https://github.com/cawa-93/vite-electron-builder/discussions/339)** if you want completly remove TypeScript. |
63 | | - |
64 | | - |
65 | | -### Vue [][vue] (optional) |
66 | | -- By default, web pages are built using [Vue]. However, you can easily change it. Or do not use additional frameworks at all. (See [React fork](https://github.com/soulsam480/vite-electron-react-starter)) |
67 | | -- Also, by default, the [vue-router] version [][vue-router] is used. |
68 | | -- Code formatting rules follow the latest Vue recommendations and best practices thanks to [eslint-plugin-vue]. |
69 | | -- Installed [Vue.js devtools beta](https://chrome.google.com/webstore/detail/vuejs-devtools/ljjemllljcmogpfapbkkighbhhppjdbg) with Vue 3 support. |
70 | | - |
71 | | -See [examples of web pages for different frameworks](https://github.com/vitejs/vite/tree/main/packages/create-vite). |
72 | | - |
73 | | -### Continuous Integration |
74 | | -- The configured workflow for check the types for each push and PR. |
75 | | -- The configured workflow for check the code style for each push and PR. |
76 | | -- **Automatic tests** used [playwright]. Simple, automated test check: |
77 | | - - Does the main window created and visible? |
78 | | - - Is the main window not empty? |
79 | | - - Is dev tools closed? |
80 | | - - Is preload script loaded? |
81 | | - |
82 | | - |
83 | | -### Continuous delivery |
84 | | -- Each time you push changes to the `main` branch, [`release`](.github/workflows/release.yml) workflow starts, which creates release draft. |
85 | | - - The version is automatically set based on the current date in the format `yy.mm.dd-minutes`. |
86 | | - - Notes are automatically generated and added to the release draft. |
87 | | - - Code signing supported. See [`compile` job in `release` workflow](.github/workflows/release.yml). |
88 | | -- **Auto-update is supported**. After the release will be published, all client applications will download the new version and install updates silently. |
89 | | - |
90 | | - |
91 | | -## Status |
92 | | - |
93 | | -This template was created to make my work easier. It may not be universal, but I try to keep it that way. |
94 | | - |
95 | | -I am actively involved in its development. But I do not guarantee that this template will be maintained in the future. |
96 | | - |
97 | | - |
98 | | -**At the moment, there are the following problems:** |
99 | | - |
100 | | -- ⚠ Playwright has **experimental** support for Electron. |
101 | | -- ⚠ Release notes are created automatically based on commit history. [`.github/actions/release-notes`](.github/actions/release-notes) is used for generation. It may not provide some scenarios. If you encounter a problem - write about it. |
102 | | -- ⏳ I want to migrate all code base to ESM. But because Nodejs ecosystem is unprepared I have not known whether this will give more benefits or more inconvenience. |
103 | | - |
104 | | -Some improvement or problems can be listed in [issues](https://github.com/cawa-93/vite-electron-builder/issues). |
105 | | - |
106 | | -**Pull requests are welcome**. |
107 | | - |
108 | | -## How it works |
109 | | -The template required a minimum [dependencies](package.json). Only **Vite** is used for building, nothing more. |
110 | | - |
111 | | -### Project Structure |
112 | | - |
113 | | -The structure of this template is very similar to the structure of a monorepo. |
114 | | - |
115 | | -The entire source code of the program is divided into three modules (packages) that are bundled each independently: |
116 | | -- [`packages/main`](packages/main) |
117 | | -Electron [**main script**](https://www.electronjs.org/docs/tutorial/quick-start#create-the-main-script-file). |
118 | | -- [`packages/preload`](packages/preload) |
119 | | -Used in `BrowserWindow.webPreferences.preload`. See [Checklist: Security Recommendations](https://www.electronjs.org/docs/tutorial/security#2-do-not-enable-nodejs-integration-for-remote-content). |
120 | | -- [`packages/renderer`](packages/renderer) |
121 | | -Electron [**web page**](https://www.electronjs.org/docs/tutorial/quick-start#create-a-web-page). |
122 | | - |
123 | | -### Build web resources |
124 | | - |
125 | | -Packages `main` and `preload` are built in [library mode](https://vitejs.dev/guide/build.html#library-mode) as it is a simple javascript. |
126 | | -`renderer` package build as regular web app. |
127 | | - |
128 | | -The build of web resources is performed in the [`scripts/build.js`](scripts/build.js). Its analogue is a sequential call to `vite build` for each package. |
129 | | - |
130 | | -### Compile App |
131 | | -Next step is run packaging and compilation a ready for distribution Electron app for macOS, Windows and Linux with "auto update" support out of the box. |
132 | | - |
133 | | -To do this, using the [electron-builder]: |
134 | | -- In npm script `compile`: This script is configured to compile the application as quickly as possible. It is not ready for distribution, is compiled only for the current platform and is used for debugging. |
135 | | -- In GitHub Action: The application is compiled for any platform and ready-to-distribute files are automatically added to the draft GitHub release. |
136 | | - |
137 | | - |
138 | | -### Using Node.js API in renderer |
139 | | -According to [Electron's security guidelines](https://www.electronjs.org/docs/tutorial/security#2-do-not-enable-nodejs-integration-for-remote-content), Node.js integration is disabled for remote content. This means that **you cannot call any Node.js api in the `packages/renderer` directly**. To do this, you **must** describe the interface in the `packages/preload` where Node.js api is allowed: |
140 | | -```ts |
141 | | -// packages/preload/src/index.ts |
142 | | -import {readFile} from 'fs/promises' |
143 | | - |
144 | | -const api = { |
145 | | - readConfig: () => readFile('/path/to/config.json', {encoding: 'utf-8'}), |
146 | | -} |
147 | | - |
148 | | -contextBridge.exposeInMainWorld('electron', api) |
149 | | -``` |
150 | | - |
151 | | -```ts |
152 | | -// packages/renderer/src/App.vue |
153 | | -import {useElectron} from '/@/use/electron' |
154 | | - |
155 | | -const {readConfig} = useElectron() |
156 | | -``` |
157 | | - |
158 | | -[Read more about Security Considerations](https://www.electronjs.org/docs/tutorial/context-isolation#security-considerations). |
159 | | - |
160 | | - |
161 | | -### Modes and Environment Variables |
162 | | -All environment variables set as part of the `import.meta`, so you can access them as follows: `import.meta.env`. |
163 | | - |
164 | | -You can also specify types of your environment variables in [`types/vite-env.d.ts`](types/vite-env.d.ts). |
165 | | - |
166 | | -The mode option is used to specify the value of `import.meta.env.MODE` and the corresponding environment variables files that needs to be loaded. |
167 | | - |
168 | | -By default, there are two modes: |
169 | | - - `production` is used by default |
170 | | - - `development` is used by `npm run watch` script |
171 | | - |
172 | | -When running building, environment variables are loaded from the following files in your project root: |
173 | | - |
174 | | -``` |
175 | | -.env # loaded in all cases |
176 | | -.env.local # loaded in all cases, ignored by git |
177 | | -.env.[mode] # only loaded in specified env mode |
178 | | -.env.[mode].local # only loaded in specified env mode, ignored by git |
179 | | -``` |
180 | | - |
181 | | -**Note:** only variables prefixed with `VITE_` are exposed to your code (e.g. `VITE_SOME_KEY=123`) and `SOME_KEY=123` will not. You can access `VITE_SOME_KEY` using `import.meta.env.VITE_SOME_KEY`. This is because the `.env` files may be used by some users for server-side or build scripts and may contain sensitive information that should not be exposed in code shipped to browsers. |
182 | | - |
183 | | - |
184 | | - |
185 | | -## Contribution |
186 | | - |
187 | | -See [Contributing Guide](contributing.md). |
188 | | - |
189 | | - |
190 | | -[vite]: https://github.com/vitejs/vite/ |
191 | | -[electron]: https://github.com/electron/electron |
192 | | -[electron-builder]: https://github.com/electron-userland/electron-builder |
193 | | -[vue]: https://github.com/vuejs/vue-next |
194 | | -[vue-router]: https://github.com/vuejs/vue-router-next/ |
195 | | -[typescript]: https://github.com/microsoft/TypeScript/ |
196 | | -[playwright]: https://playwright.dev |
197 | | -[vue-tsc]: https://github.com/johnsoncodehk/vue-tsc |
198 | | -[eslint-plugin-vue]: https://github.com/vuejs/eslint-plugin-vue |
199 | | -[cawa-93-github]: https://github.com/cawa-93/ |
200 | | -[cawa-93-sponsor]: https://www.patreon.com/Kozack/ |
| 17 | +**MIT** |
0 commit comments