Для начала нужно установить Node.js и nmv

Далее нужно установить AVN - пакет для автоматической смены версии ноды для каждого разрабаватывемого приложения (выбирает версию ноды, которое поддерживает приложение)

npm install -g avn avn-nvm avn-n
avn setup

Далее создадим файл, в котором впишем версию ноды, и который зафиксирует эту версию для проекта через avn .nvmrc

18.9.0

Найти установщики через npm можно на официальном сайте electron

npm i -D electron@beta

Конкретно этот бинарник электрона в папке электрона является компилятором программы в целом

Добавляем в json проекта команду start, которая запустит компиляцию приложения через бинарник электрона

package.json

"scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "npx electron index.js"
  },

Чтобы запустить процесс компиляции приложения, пишем команду:

npm start

Это файл самой логики нашего приложения, который срабатывает автоматически при включении нашей программы.

  • Тут импортируются компоненты электрона
  • Создаётся инстанс окна через функцию createWindow()
  • Создаётся это самое окно, когда загружается приложение whenReady()

index.js

// Импорт через деструктуризацию определённых компонентов в систему
const { app, BrowserWindow } = require("electron");
const path = require("path");
 
// Эта функция создаёт браузерное окно из импортированного модуля
function createWindow() {
	// создаём инстанс окна
	const win = new BrowserWindow({
		width: 1200,
		height: 800,
		webPreferences: {
			preload: path.join(__dirname, "preload.js"),
		},
	});
 
	// в окно загружается файл с нашим html-файлом
	win.loadFile("index.html");
 
	// откроет окно разработчика при запуске программы
	win.webContents.openDevTools();
}
 
// эта функция запускает окно нашего браузера, когда приложение загрузилось
app.whenReady().then(() => {
	createWindow();
 
	// Эта настройка предназначена для macOS, чтобы запускать новое окно, когда все окна закрыты
	app.on("activate", () => {
		if (BrowserWindow.getAllWindows().length === 0) {
			createWindow();
		}
	});
});
 
// когда все окна приложения закрыты необходимо сделать что-то - выйти из приложения
app.on("window-all-closed", () => {
	if (process.platform !== "darwin") {
		app.quit(); // выход из системы
	}
});
 

Основной файл, который подгружается при первом включении

index.html

<!DOCTYPE html>
<html lang="en">
 
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Basic App</title>
 
</head>
 
<body>
	<h1>Hello, world!</h1>
	<script src="renderer.js"></script>
</body>
 
</html>

renderer.js

console.log("Hello, world!!");

Так выглядит, собственно, запущенное приложение на JS

И закономерно нужно закрыть вывод папки модулей на гитхаб .gitignore

node_modules

Примерно так выглядит структура конечного приложения:

|400