Данил
Коллеги, подскажите мнение своё насчёт ORM под typescript на электрон
Ранее использовал sequelize, но очень не нравится его реализация с тайпскриптом
Ориентируюсь на prisma/typeorm, какой из них лучше будет?
Сам проект будет представлять собой взаимодействие автономных распределённых приложений со своей бизнес-логикой (около 150), которые должны будут отправлять собранные данные в основную базу(mysql) в зависимости наличия интернета на устройстве
На приложениях будет mysql/sqlite
eden
Данил
У нас декстопные приложения
Данил
На которых связка вью + электрон + тайпскрипт + вайт
Данил
Они собирают инфу определенную в оффлайн, так и в онлайн режиме
И условно каждые 4 часа эту инфу присылают на сервак основной
Данил
Есть проект, похожий по назначению и там был sequelize
eden
так или иначе, у меня на бэке призма, пока очень нравится
Данил
Arsen
В основную базу лить данные лучше через API, а не открывая сокеты со 150 приложений и пуская их лить напрямую.
Unknown
Там в любом случае условие, что лить данные только при подключении к интернету. Т.е. их сначала надо хранить, а потом сравнивать и синхронить. Так что надо делать склайт и облаком любую удобную
Arsen
Если задача просто объекты залить, то ORM не нужен, можно объекты серилизовать в JSON и в любой KV базе хранить и при появления сети отправлять на сервер.
ORM нужен если вы на клиенте собираетесь реляционными отношениями пользоваться, делать быстрые выборки с использованием индексов и т.д.
🅰️nimeCoder
🅰️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.
Anonym Squad
sir
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 соотвественно
No
если ты везде будешь передавать то, что в таргетУрле тебя, то у тебя так и будет каждый раз основное окно открываться
ALΣX
Привет, подскажите, плиз, модальные окна (BrowserWindow с параметрами modal: true и указыванием parent) отображается на macOS без панели управления окном (закрыть свернуть). Можна как-то решить данную проблему (кроме добавления кастомной панели)?
Unknown
Так разве не в этом суть модального окна на уровне системы - чтобы не было органов управления?
ALΣX
Unknown
show: true\false
ALΣX
show: true\false
я к тому, что через модальное окно загружаю сторонний ресурс и если возникнет какая-то ошибка и не прогрузится сайдбар, который позволяет закрыть окно и вернуться к основному, то выходит, что единственным выходом будет перезагружать приложение
ALΣX
в любом случае, для меня было открытие ибо на Windows таких проблем нет
Unknown
ну окна в маке своей жизнью живут, события немного отличаются
Unknown
Unknown
iloveyou
привет, у меня есть такая задача:
есть electron приложение - обычное окно с кнопкой начать и завершить. при нажатии на кнопку начать запускается питоновский скрипт client.py через child_process. если вкратце, то питоновский скрипт работает с библиотекой cv2 и mediapipe, т.е. запускает камеру на компьютере пользователя.
Так вот, когда я пишу npm start, то всё корректно работает. однако когда я запускаю electron-builder -> делаю это приложение исполняемым файлом, например dmg под macOS, то при нажатии на кнопку начать client.py не запускается
.
может кто-нибудь сталкивался с похожим, как исправить?
No
Vahe
Vahe
проблема именно в том, чтобы окно моего приложения только появлялось тогда, когда есть переход на рабочий стол
Vahe
что-то там wallpapers?) попробую найти, спасибо
iloveyou
А путь корректный до скрипта в сборке?
мне кажется как раз в этом и проблема: когда я делаю сборку, то пути меняются, щас объясню
.
создаётся папка новая, условно my_project, а там уже есть папка project, в которой лежит исполняемый файл dmg. и после этого файл dmg не может найти питоновский файл
iloveyou
и такой вопрос из этого вытекает: нужно ли хранить питоновский файл рядом с файлом dmg? я просто хочу сделать так, чтобы был один файл dmg, типа собиралась туда вся папка app - в папке и main.js лежит, и само окно index.html, и файл client.py
iloveyou
как тогда пути лучше прописывать? вдруг они меняются, когда появляется папка my_project
iloveyou
абсолютные пути я не хочу использовать, так как хочу, чтобы файл dmg можно было скачать и запустить независимо от ОС
iloveyou
или хотя бы папку скачать
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.
Blessed
Mulünur
графика на react с использованием ant-d
такого огромного веса быть не должно, я думаю. минимальный вес целой сборки был 230 мб
Blessed
Mulünur
Blessed
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
И ещё используешь ли ты сборщик?
Blessed
eden
eden
и что значит "бэк на расте"?
бэк может быть на чем угодно, раст не обязателен
Blessed
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
Blessed