Конвертировать приложение Angular 4 в настольное приложение, используя электрон
Я разработал приложение, используя Angular 4. Мне нужно разработать настольное приложение для этого веб-приложения. Из моего первоначального исследования я получил лучшее решение - электрон. Любой, пожалуйста, предложите шаги, чтобы преобразовать угловое 4 приложение в электронное?
Пожалуйста, предложите!!!
4 ответа
Предполагая, что у вас есть работающее приложение Angular, я использую следующие шаги, чтобы преобразовать его в электронное веб-приложение:
- В
src/index.html
менять<base href="/">
в<base href="./">
- Установить электрон
npm install electron --save-dev
- Создайте
main.js
в корне проекта (не в src) (это гдеcreateWindow()
код идет) - обеспечивать
main.js
указывает наdist/index.html
(не простоindex.html
) - добавлять
"main":"main.js"
, в package.json добавьте их в раздел сценариев package.json
"electron": "electron .", // <-- run electron "electron-build": "ng build --prod && electron ." // <-- build app, then run electron `
запустить / отладить приложение с помощью:
npm run electron-build
построить приложение:
npm install electron-packager -g
npm install electron-packager --save-dev
затем запустите:
electron-packager . --platform=win32
Пример main.js:
const {app, BrowserWindow} = require('electron')
const path = require('path')
const url = require('url')
let win
function createWindow () {
win = new BrowserWindow({width: 800, height: 600}) // load the dist folder from Angular
win.loadURL(url.format({ pathname: path.join(__dirname, 'dist/index.html'), protocol: 'file:', slashes: true }))
// Open the DevTools optionally:
// win.webContents.openDevTools()
win.on('closed', () => { win = null })
}
app.on('ready', createWindow)
app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit() } })
app.on('activate', () => { if (win === null) { createWindow() } })
Доступ к функциям электронного API
Существует быстрый и простой способ получить доступ к API через пакет ngx-Electron.
Установите его из консоли:
npm install ngx-electron --save
Он должен быть добавлен в массив import в /src/app/app.module.ts:
import { NgxElectronModule } from 'ngx-electron';
@NgModule({
...
imports: [
BrowserModule,
NgxElectronModule // Add it here
],
...
})
export class AppModule { }
Чтобы использовать его, откройте /src/app/app.component.ts и добавьте следующее в импорт:
import { Component } from '@angular/core';
import { ElectronService } from 'ngx-electron';
Затем в классе компонента создайте его экземпляр с помощью внедрения зависимости, который предоставляет доступ к методам API:
export class AppComponent {
constructor(private _electronService: ElectronService) {} // DI
launchWindow() {
this._electronService.shell.openExternal('http://google.co.uk');
}
}
Он предоставляет вам следующую функциональность (посетите их Github для получения дополнительной информации):
- desktopCapturer: Electron.DesktopCapturer - API захвата рабочего стола Electron
- ipcRenderer: Electron.IpcRenderer - Электронный IpcRenderer
- Remote: Electron.Remote - Возможности электронного пульта
- webFrame: Electron.WebFrame - Электронный веб-фрейм
- буфер обмена: Electron.Clipboard - API буфера обмена
- crashReporter: Electron.CrashReporter - Электронный Сбой Reporter
- process: NodeJS.Process - объект процесса Electron
- экран: Electron.Screen - API экрана Electron
- shell: Electron.Shell - API оболочки Электрон
- nativeImage: Electron.NativeImage - API NativeImage Electron
- isElectronApp: boolean - указывает, выполняется ли приложение внутри электрона или нет
Я только что успешно создал настольное приложение из приложения angular, и ниже приведены шаги:
1. Измените каталог на свое приложение angular и установите электрон
cd my-angular-app/
npm i -D electron@latest
2. Создайте файл электронной записи. Создайте файл main.js в корневом каталоге вашего проекта. Этот файл будет основной точкой входа для электронного приложения и будет содержать основной API для настольного приложения.
содержимое main.js:
const { app, BrowserWindow } = require("electron");
const path = require("path");
const url = require("url");
let win;
function createWindow() {
win = new BrowserWindow({ width: 800, height: 600 });
// load the dist folder from Angular
win.loadURL(
url.format({
pathname: path.join(__dirname, '/dist/index.html'), // compiled verion of our app
protocol: "file:",
slashes: true
})
);
// The following is optional and will open the DevTools:
// win.webContents.openDevTools()
win.on("closed", () => {
win = null;
});
}
app.on("ready", createWindow);
// on macOS, closing the window doesn't quit the app
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});
3. обновите package.json, указав сведения о вашем приложении.
Обновите файл package.json, чтобы он указывал на основную точку входа в электронном виде, и введите информацию о своем приложении (имя приложения, версия, описание и автор).
package.json
{
"name": "my-angular-app",
"version": "0.0.1",
"main": "main.js",
"author" : "my-name",
"description": "The app is about foo and bar",
...
}
4. Обновите скрипт в package.json.
Добавьте новый сценарий NPM, который сначала создаст сборку, а затем запустит настольное приложение из папки dist.
{
...
"scripts": {
"electron": "ng build --base-href ./ && electron .",
...
}
...
}
5. Обновите angular, чтобы указать каталог сборки.
В angular.json установите каталог сборки, как мы установили /dist/index.html в файле main.js.
...,
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist",
6. Запустите приложение. При прочих равных, вы должны увидеть, что приложение запущено в окне рабочего стола после выполнения команды run:
npm run electron
7. Сборка (упаковка) приложения:
С инструментами
Вы можете использовать следующие инструменты для распространения вашего приложения:
электронная кузница
строитель электронов
электронный упаковщик
Эти инструменты позаботятся обо всех шагах, которые вам нужно предпринять, чтобы получить распространяемое приложение Electron, например, объединить ваше приложение, переименовать исполняемый файл и установить правильные значки.
Ниже показано, как вы можете упаковать electronic-forge.
1. Добавьте Electron Forge в качестве компонента разработки вашего приложения и используйте его команду импорта для настройки каркаса Forge:
npm install --save-dev @electron-forge/cli
npx electron-forge import
2. Создайте распространяемый файл с помощью команды make в Forge:
npm run make
Electron Forge создает папку out, в которой будет находиться ваш пакет:
// Example for macOS
out/
├── out/make/zip/darwin/x64/my-electron-app-darwin-x64-1.0.0.zip
├── ...
└── out/my-electron-app-darwin-x64/my-electron-app.app/Contents/MacOS/my-electron-app
Я надеюсь, что это поможет многим людям.
Простые шаги:
- Построить угловое приложение (напр.: ng build)
- Скопируйте файлы из
dist
каталог для электронного проекта (index.html
bundle.js
так далее.) - Запустить электронное приложение
У меня есть решение. Просто добавь
../
на путь к вашему изображению, например:
src="../assets/someImage.png"