конвертировать приложение angular 4 в настольное приложение с помощью электрона

Я разработал приложение с использованием angular 4. Мне нужно разработать настольное приложение для этого веб-приложения. Из моих первоначальных исследований я получил лучшее решение - электрон. Кто-нибудь, пожалуйста, предложите шаги по преобразованию приложения angular 4 в электрон?

Пожалуйста, предложите!!!


person user3541485    schedule 04.08.2017    source источник
comment
Этот вопрос слишком широк.   -  person n00dl3    schedule 04.08.2017
comment
я не понял. На самом деле это мое сомнение   -  person user3541485    schedule 04.08.2017


Ответы (3)


Предполагая, что у вас есть работающее приложение 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​

Его нужно добавить в массив импорта в /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
  • удаленный: Electron.Remote - возможности Electron Remote
  • webFrame: Электрон.WebFrame - Электрон WebFrame
  • буфер обмена: Electron.Clipboard — API буфера обмена
  • CrashReporter: Electron.CrashReporter - CrashReporter Electron
  • процесс: NodeJS.Process — объект процесса Electron
  • screen: Electron.Screen — API экрана Electron
  • оболочка: Electron.Shell — API оболочки Electron
  • nativeImage: Electron.NativeImage — API NativeImage от Electron
  • isElectronApp: boolean — указывает, выполняется ли приложение внутри электрона или нет.
person DJEatch    schedule 13.04.2018
comment
Спасибо чувак, сэкономил кучу времени - person Nilesh Sutar; 17.07.2019
comment
Я получил тонны ошибок, следуя этим инструкциям. Вот только первый... ОШИБКА в src/app/app.module.ts:19:5 - ошибка NG6001: невозможно объявить "NgxElectronModule" в NgModule, так как он не является частью текущей компиляции. - person user3217883; 06.08.2020

Простые шаги:

  1. Сборка углового приложения (например: ng build)
  2. Скопируйте файлы из каталога dist в электронный проект (index.html bundle.js и т. д.)
  3. Запустить электронное приложение
person Dani Grosu    schedule 04.08.2017
comment
я выполнил шаг и создал электронное приложение, но css и изображения не загружаются в электронном приложении. Пример: файл:///C:/assets/css/custom.css не найден - person user3541485; 04.08.2017
comment
в index.html есть тег <base href=/>; просто поиграйте с атрибутом href. Например href="./" - person Dani Grosu; 04.08.2017

У меня есть решение для этого. Просто добавьте ../ к пути к изображению, например: src="../assets/someImage.png"

person Prerna Kakria    schedule 24.02.2021