Данил
Коллеги, подскажите мнение своё насчёт ORM под typescript на электрон Ранее использовал sequelize, но очень не нравится его реализация с тайпскриптом Ориентируюсь на prisma/typeorm, какой из них лучше будет? Сам проект будет представлять собой взаимодействие автономных распределённых приложений со своей бизнес-логикой (около 150), которые должны будут отправлять собранные данные в основную базу(mysql) в зависимости наличия интернета на устройстве На приложениях будет mysql/sqlite
Данил
У нас декстопные приложения
Данил
На которых связка вью + электрон + тайпскрипт + вайт
Данил
Они собирают инфу определенную в оффлайн, так и в онлайн режиме И условно каждые 4 часа эту инфу присылают на сервак основной
Данил
Есть проект, похожий по назначению и там был sequelize
eden
Есть проект, похожий по назначению и там был sequelize
он работает с sqlite, а вот как с MySQL клиентский код подружить - я что-то не представляю
eden
так или иначе, у меня на бэке призма, пока очень нравится
Данил
он работает с sqlite, а вот как с MySQL клиентский код подружить - я что-то не представляю
Вот это уже задача другая)) По-хорошему бы как-то подружить
Arsen
В основную базу лить данные лучше через API, а не открывая сокеты со 150 приложений и пуская их лить напрямую.
Unknown
Там в любом случае условие, что лить данные только при подключении к интернету. Т.е. их сначала надо хранить, а потом сравнивать и синхронить. Так что надо делать склайт и облаком любую удобную
Arsen
Если задача просто объекты залить, то ORM не нужен, можно объекты серилизовать в JSON и в любой KV базе хранить и при появления сети отправлять на сервер. ORM нужен если вы на клиенте собираетесь реляционными отношениями пользоваться, делать быстрые выборки с использованием индексов и т.д.
🅰️nimeCoder
Любое онлайн приложение имеет отличную от той что на сервере инфу, а тут их 150 штук уникальных, дропать просто все что не первое? В ручную разбирать столько достаточно затрудниьельно
Unknown
Ну так если не хочется сталкиваться с какими-либо проблемами по синхронизации, то вешаешь плашку «без интернета не работаю» и поделом. Только у него изначально условие чтобы данные накапливались даже при оффлайне
eden
вроде есть offline first базы данных, которые разруливают конфликты сами
eden
https://rxdb.info/
eden
https://github.com/pubkey/client-side-databases а вот ещё список таких БД
Unknown
Прикольно, буду знать
sir
Всем привет! Может ктонибудь сможет направить меня в нужное русло? Я хочу создать свой собственный нативный модуль чтобы вызывать его в своем реакт Нэтив приложении. ранее я добавил свой пункт в контекстное меню приложения Функционал данного нативного модуля должен быть следующим: он должен получать и обрабатывать текст, который пользователь выделяет и направляет с помощью контекстного меню в мое приложение. Обработанный текст должен вызываться в моем приложении React-Native в корневом файле App.jsx после получения, он должен сохраняться внутри AssyncStorage.
Denis
Добрый день! Возник такой вопрос, при создании приложения на Electron + React возникла необходимость создавать дополнительные окна. Но вот проблема, в режиме разработчика в новом окне открывается информация с main окна. Если приложение упаковать с помощью webpack и открывать что главное, что дополнительное окно с помощью html, все работает нормально, но чтобы корректировать нужно каждый раз переупаковывать. Может кто нибудь сталкивался с такой проблемой? пример кода в main const isDev = require('electron-is-dev'); const startUrl = isDev ? 'http://localhost:3000' : file://${path.join('smart-signalbox-react/src/index.js')}; function createWindow() { const mainWindow = new BrowserWindow({ width: 1280, height: 1024, webPreferences: { nodeIntegration: false, contextIsolation: true, enableRemoteModule: false, preload: path.join(__dirname, 'preload.js'), }, }); // mainWindow.loadFile(path.join(__dirname, 'index.html')); mainWindow.loadURL(startUrl); mainWindow.webContents.openDevTools(); } app.on('ready', createWindow); app.on('activate', function () { if (BrowserWindow.getAllWindows().length === 0) createWindow() }); app.on('window-all-closed', function () { if (process.platform !== 'darwin') app.quit() }); ipcMain.on('open-new-window', (event, buttonId) => { const mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: false, contextIsolation: true, enableRemoteModule: false, }, }); let targetUrl; switch (buttonId) { case 'TempSensor': targetUrl = isDev ? 'http://localhost:3000/temp-sensor' : file://${path.join('smart-signalbox-react/src/Windows/Temp/indexTemp.js')}; // targetUrl = 'temp-sensor.html' break; } console.log(targetUrl) mainWindow.loadURL(targetUrl); // mainWindow.loadFile(path.join(__dirname, targetUrl)); mainWindow.webContents.openDevTools(); });
Данил
Если задача просто объекты залить, то ORM не нужен, можно объекты серилизовать в JSON и в любой KV базе хранить и при появления сети отправлять на сервер. ORM нужен если вы на клиенте собираетесь реляционными отношениями пользоваться, делать быстрые выборки с использованием индексов и т.д.
Там подразумевается реляционная база из 100+ таблиц, у всех приложений она одинаковая, только наполнена собственными данными ( их распределяет основной сервер ), Я сказал за *свою* бизнес-логику, забыв уточнить, что она одинакова у каждого приложения Приложение всегда должно работать независимо от наличия интернета, он влияет только на отправку данных через апи на основной сервер и проверкой их доставки Суть в том, что основной вопрос вообще был как mysql сюда подкрутить, но видимо никак... Даже и не стал спрашивать ахах
No
Добрый день! Возник такой вопрос, при создании приложения на Electron + React возникла необходимость создавать дополнительные окна. Но вот проблема, в режиме разработчика в новом окне открывается информация с main окна. Если приложение упаковать с помощью webpack и открывать что главное, что дополнительное окно с помощью html, все работает нормально, но чтобы корректировать нужно каждый раз переупаковывать. Может кто нибудь сталкивался с такой проблемой? пример кода в main const isDev = require('electron-is-dev'); const startUrl = isDev ? 'http://localhost:3000' : file://${path.join('smart-signalbox-react/src/index.js')}; function createWindow() { const mainWindow = new BrowserWindow({ width: 1280, height: 1024, webPreferences: { nodeIntegration: false, contextIsolation: true, enableRemoteModule: false, preload: path.join(__dirname, 'preload.js'), }, }); // mainWindow.loadFile(path.join(__dirname, 'index.html')); mainWindow.loadURL(startUrl); mainWindow.webContents.openDevTools(); } app.on('ready', createWindow); app.on('activate', function () { if (BrowserWindow.getAllWindows().length === 0) createWindow() }); app.on('window-all-closed', function () { if (process.platform !== 'darwin') app.quit() }); ipcMain.on('open-new-window', (event, buttonId) => { const mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: false, contextIsolation: true, enableRemoteModule: false, }, }); let targetUrl; switch (buttonId) { case 'TempSensor': targetUrl = isDev ? 'http://localhost:3000/temp-sensor' : file://${path.join('smart-signalbox-react/src/Windows/Temp/indexTemp.js')}; // targetUrl = 'temp-sensor.html' break; } console.log(targetUrl) mainWindow.loadURL(targetUrl); // mainWindow.loadFile(path.join(__dirname, targetUrl)); mainWindow.webContents.openDevTools(); });
Ну можешь либо еще один сервер поднять или настроить роут отдельный под окна. И открывать тогда либо localhost:3123, либо localhost:3000/window1 соотвественно
Denis
Ну можешь либо еще один сервер поднять или настроить роут отдельный под окна. И открывать тогда либо localhost:3123, либо localhost:3000/window1 соотвественно
targetUrl = isDev ? 'http://localhost:3000/temp-sensor' : file://${path.join('smart-signalbox-react/src/Windows/Temp/indexTemp.js')}; Вот я вроде так и сделал, но все равно открыло основное окно
No
targetUrl = isDev ? 'http://localhost:3000/temp-sensor' : file://${path.join('smart-signalbox-react/src/Windows/Temp/indexTemp.js')}; Вот я вроде так и сделал, но все равно открыло основное окно
ну если я тебя правильно понял, то тебе нужно открывать разные окна вот mainWindow ты передаешь targetUrl - это одно окно, соответсвенно во второе окно ты должен передавать уже не таргетурл, а новый путь (девсервера или прост хмтлку)
No
если ты везде будешь передавать то, что в таргетУрле тебя, то у тебя так и будет каждый раз основное окно открываться
Denis
ну если я тебя правильно понял, то тебе нужно открывать разные окна вот mainWindow ты передаешь targetUrl - это одно окно, соответсвенно во второе окно ты должен передавать уже не таргетурл, а новый путь (девсервера или прост хмтлку)
В стартовое окно я передаю startUrl const startUrl = isDev ? 'http://localhost:3000' : file://${path.join('smart-signalbox-react/src/index.js')}; А в дополнительные TargerUrl let targetUrl; targetUrl = isDev ? 'http://localhost:3000/temp-sensor' : file://${path.join('smart-signalbox-react/src/Windows/Temp/indexTemp.js')};
ALΣX
Привет, подскажите, плиз, модальные окна (BrowserWindow с параметрами modal: true и указыванием parent) отображается на macOS без панели управления окном (закрыть свернуть). Можна как-то решить данную проблему (кроме добавления кастомной панели)?
Unknown
Так разве не в этом суть модального окна на уровне системы - чтобы не было органов управления?
ALΣX
Так разве не в этом суть модального окна на уровне системы - чтобы не было органов управления?
ну ок, тогда как его закрыть? (у меня прописана для этого логика, проблем нет, но все же)
Unknown
show: true\false
ALΣX
show: true\false
я к тому, что через модальное окно загружаю сторонний ресурс и если возникнет какая-то ошибка и не прогрузится сайдбар, который позволяет закрыть окно и вернуться к основному, то выходит, что единственным выходом будет перезагружать приложение
ALΣX
в любом случае, для меня было открытие ибо на Windows таких проблем нет
Unknown
ну окна в маке своей жизнью живут, события немного отличаются
ALΣX
ну окна в маке своей жизнью живут, события немного отличаются
ну та вот перебираю всякие варианты, но пока ничего не накопал ( спасиб)
iloveyou
привет, у меня есть такая задача: есть electron приложение - обычное окно с кнопкой начать и завершить. при нажатии на кнопку начать запускается питоновский скрипт client.py через child_process. если вкратце, то питоновский скрипт работает с библиотекой cv2 и mediapipe, т.е. запускает камеру на компьютере пользователя. Так вот, когда я пишу npm start, то всё корректно работает. однако когда я запускаю electron-builder -> делаю это приложение исполняемым файлом, например dmg под macOS, то при нажатии на кнопку начать client.py не запускается . может кто-нибудь сталкивался с похожим, как исправить?
Vahe
проблема именно в том, чтобы окно моего приложения только появлялось тогда, когда есть переход на рабочий стол
No
никто не сможет помочь? вопрос всё ещё актуален
Есть такое приложение с виндоус сторе «что-то там wallpapers”. Попробуй погуглить, я не уверен, что оно на электроне, но может там есть исходники, которые помогут тебе
Vahe
что-то там wallpapers?) попробую найти, спасибо
iloveyou
А путь корректный до скрипта в сборке?
мне кажется как раз в этом и проблема: когда я делаю сборку, то пути меняются, щас объясню . создаётся папка новая, условно my_project, а там уже есть папка project, в которой лежит исполняемый файл dmg. и после этого файл dmg не может найти питоновский файл
iloveyou
и такой вопрос из этого вытекает: нужно ли хранить питоновский файл рядом с файлом dmg? я просто хочу сделать так, чтобы был один файл dmg, типа собиралась туда вся папка app - в папке и main.js лежит, и само окно index.html, и файл client.py
iloveyou
как тогда пути лучше прописывать? вдруг они меняются, когда появляется папка my_project
iloveyou
абсолютные пути я не хочу использовать, так как хочу, чтобы файл dmg можно было скачать и запустить независимо от ОС
iloveyou
или хотя бы папку скачать
No
что-то там wallpapers?) попробую найти, спасибо
Live wallpapers если я не ошибаюсь. Она по сути рендерит htmlку с css и js как обои
No
и такой вопрос из этого вытекает: нужно ли хранить питоновский файл рядом с файлом dmg? я просто хочу сделать так, чтобы был один файл dmg, типа собиралась туда вся папка app - в папке и main.js лежит, и само окно index.html, и файл client.py
Его не рядом с дмг, а внутри по сути хранить. Те вместе с со сбилженным main.js он рядом должен лежать. Ты можешь зайти внутрь установленной прилы и посмотреть как там устроено все. Скорее всего у тебя все упаковывается в asar архив, внутри которого лежит твой мейн, прелоад и рендерер
Mulünur
Всем привет. Помогите, пожалуйста, уменьшить объем готового приложения electron. Я точно делаю что-то не так, пытаюсь очень долго разобраться, но вес .exe 150 мб, а папка resources нестабильных размеров, бывает и 600 мб... 1) могу ли я удалить хромиум из приложения? Пусть на компьютере пользователя уже есть установленный хром, могу ли я использовать каким-то образом глобальный хромиум, отказавшись от запакованного в сборку? 2) Использую для сборки electron-forge, в коде используется модуль fs, однако я не разбиралась с native modules, не совсем ясно, нужно ли их предустанавливать, или же сборщик сам делает оптимальную компиляцию такого кода. 3) В конфиге forge я указываю prune:true как требование для удаления dev-зависимостей. Однако, команда не срабатывает при сборке, на node_modules ставятся права read-only, мне приходится их исправлять и прунить вручную, что из-за большого объема модулей занимает много времени. Спасибо за внимание! Конфиг сборщика : "config": { "forge": { "packagerConfig": { "prune": true, "asar": true }, "makers": [ { "name": "@electron-forge/maker-squirrel" } ] } },
Blessed
Всем привет. Помогите, пожалуйста, уменьшить объем готового приложения electron. Я точно делаю что-то не так, пытаюсь очень долго разобраться, но вес .exe 150 мб, а папка resources нестабильных размеров, бывает и 600 мб... 1) могу ли я удалить хромиум из приложения? Пусть на компьютере пользователя уже есть установленный хром, могу ли я использовать каким-то образом глобальный хромиум, отказавшись от запакованного в сборку? 2) Использую для сборки electron-forge, в коде используется модуль fs, однако я не разбиралась с native modules, не совсем ясно, нужно ли их предустанавливать, или же сборщик сам делает оптимальную компиляцию такого кода. 3) В конфиге forge я указываю prune:true как требование для удаления dev-зависимостей. Однако, команда не срабатывает при сборке, на node_modules ставятся права read-only, мне приходится их исправлять и прунить вручную, что из-за большого объема модулей занимает много времени. Спасибо за внимание! Конфиг сборщика : "config": { "forge": { "packagerConfig": { "prune": true, "asar": true }, "makers": [ { "name": "@electron-forge/maker-squirrel" } ] } },
Так электрон с собой огромный багаж тянет ( Хромиум ) как гибридное приложение
Blessed
А что ты кстати разрабатываешь?
Blessed
Не слышал о том чтобы вырезать хромиум, врятле такое возможно так как он не везде есть
Arsen
Всем привет. Помогите, пожалуйста, уменьшить объем готового приложения electron. Я точно делаю что-то не так, пытаюсь очень долго разобраться, но вес .exe 150 мб, а папка resources нестабильных размеров, бывает и 600 мб... 1) могу ли я удалить хромиум из приложения? Пусть на компьютере пользователя уже есть установленный хром, могу ли я использовать каким-то образом глобальный хромиум, отказавшись от запакованного в сборку? 2) Использую для сборки electron-forge, в коде используется модуль fs, однако я не разбиралась с native modules, не совсем ясно, нужно ли их предустанавливать, или же сборщик сам делает оптимальную компиляцию такого кода. 3) В конфиге forge я указываю prune:true как требование для удаления dev-зависимостей. Однако, команда не срабатывает при сборке, на node_modules ставятся права read-only, мне приходится их исправлять и прунить вручную, что из-за большого объема модулей занимает много времени. Спасибо за внимание! Конфиг сборщика : "config": { "forge": { "packagerConfig": { "prune": true, "asar": true }, "makers": [ { "name": "@electron-forge/maker-squirrel" } ] } },
Удалить хромиум нельзя. Если надо маленькое приложение, то электрон в принципе не подходит. Посмотрите, например, react native.
Mulünur
А что ты кстати разрабатываешь?
визуальный релактор xml файлов (ролевых матриц)
Mulünur
графика на react с использованием ant-d такого огромного веса быть не должно, я думаю. минимальный вес целой сборки был 230 мб
Mulünur
Не слышал о том чтобы вырезать хромиум, врятле такое возможно так как он не везде есть
Да, я пыталась гуглить, тоже читала об этом, но все таки решила спросить. Спасибо!
Arsen
Может какие-то статические файлы попадают в сборку по ошибке.
eden
Всем привет. Помогите, пожалуйста, уменьшить объем готового приложения electron. Я точно делаю что-то не так, пытаюсь очень долго разобраться, но вес .exe 150 мб, а папка resources нестабильных размеров, бывает и 600 мб... 1) могу ли я удалить хромиум из приложения? Пусть на компьютере пользователя уже есть установленный хром, могу ли я использовать каким-то образом глобальный хромиум, отказавшись от запакованного в сборку? 2) Использую для сборки electron-forge, в коде используется модуль fs, однако я не разбиралась с native modules, не совсем ясно, нужно ли их предустанавливать, или же сборщик сам делает оптимальную компиляцию такого кода. 3) В конфиге forge я указываю prune:true как требование для удаления dev-зависимостей. Однако, команда не срабатывает при сборке, на node_modules ставятся права read-only, мне приходится их исправлять и прунить вручную, что из-за большого объема модулей занимает много времени. Спасибо за внимание! Конфиг сборщика : "config": { "forge": { "packagerConfig": { "prune": true, "asar": true }, "makers": [ { "name": "@electron-forge/maker-squirrel" } ] } },
есть какой-то форк электрона, где хромиум не идет в комплекте, но он вроде заглох. посмотри Tauri, там приложения весят мегабайт 30
Blessed
И ещё используешь ли ты сборщик?
eden
и что значит "бэк на расте"? бэк может быть на чем угодно, раст не обязателен
eden
Я о прослойке работы с нативными апи
это да, но если повезет, её трогать не придется вроде
Blessed
а минусы?
Нужда знать раст непомерно усложняет задачу и лишает всех преимуществ гибридного приложения, тоесть простоты и скорости разработки
eden
а зачем может понадобиться лезть в кишки?
Blessed
Для работы с нативными апи
eden
мне кажется, там есть жс апи для этого
Mulünur
А что будешь делать тогда?
Буду пробовать что-то делать с node-modules, сейчас проект не собирается как было в лучшие времена 230 мб, тк сборщик после prune ищет библиотеку иконок... Устанавливая ее, я снова получаю сборку на 500 мб. > electron-forge package ✔️ Checking your system ✔️ Preparing to package application ✔️ Running packaging hooks ✔️ Running generateAssets hook ✔️ Running prePackage hook ❯ Packaging application ❯ Packaging for x64 on win32 ✖️ Copying files › Failed to locate module "@ant-design/icons" from "C:\Converter\Acp.RoleMatrixEditor" в совсем крайнем случае можно попробовать перевести команды проекта на yarn и использовать electron builder
Blessed
Я не пробовал Таури, не могу быть обьективным
eden
Я не пробовал Таури, не могу быть обьективным
same here, но рассмотреть определенно стоит
Mulünur
Может какие-то статические файлы попадают в сборку по ошибке.
кажется, все минималистично "build": { "extends": null, "files": [ "build/**/*", "src/index.tsx", "package.json" ] },