首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用电子将angular 4应用程序转换为桌面应用程序

使用电子将angular 4应用程序转换为桌面应用程序
EN

Stack Overflow用户
提问于 2017-08-04 07:32:46
回答 4查看 7.7K关注 0票数 7

我已经使用angular 4开发了应用程序。我需要为这个web应用程序开发桌面应用程序。从我最初的研究中,我得到了最好的解决方案是电子。谁能建议一下将angular 4应用程序转换为电子应用程序的步骤?

请推荐!

EN

回答 4

Stack Overflow用户

发布于 2018-04-13 08:20:09

假设你有一个正常工作的Angular应用程序,我使用以下步骤将其转换为电子web应用程序:

将项目根目录(而不是src中)中的电子邮件更改为<base href="./">

  • Install
  • src/index.html (这是代码所在的位置),并确保电子邮件指向< <base href="/"> >d15>(不仅仅是< index.html)
  • add >d19,to package.json
  • add main.js to createWindow()
  • of main.js package.json )。

“电子”:“电子。”,// <--运行电子“电子构建”:"ng build --prod && Electron.“// <--构建应用,然后运行电子`

使用以下命令运行/调试应用程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm run electron-build

要构建应用程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install electron-packager -g​​
npm install electron-packager --save-dev

然后运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
electron-packager . --platform=win32​

示例main.js:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,那就是通过一个名为ngx-electron的包。

从控制台安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install ngx-electron --save​

必须将其添加到/src/app/app.module.ts中的imports数组中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { NgxElectronModule } from 'ngx-electron';

@NgModule({
  ...
  imports: [
    BrowserModule,
    NgxElectronModule   // Add it here
  ],
  ...
})
export class AppModule { }

要使用它,请打开/src/app/app.component.ts并将以下内容添加到导入中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { Component } from '@angular/core';
import { ElectronService } from 'ngx-electron';

然后,在component类中,通过依赖项注入创建它的一个实例,这样就可以访问API的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export class AppComponent {

  constructor(private _electronService: ElectronService) {}   // DI

  launchWindow() {
    this._electronService.shell.openExternal('http://google.co.uk');
  }

}

它为你提供了以下功能(更多信息请访问他们的Github​):

  • desktopCapturer:外壳-电子的桌面捕获API
  • ipcRenderer:外壳-电子IpcRenderer
  • remote:外壳-电子远程capabilities
  • webFrame:外壳-电子远程界面-剪贴板API
  • crashReporter:外壳-电子的CrashReporter
  • process:外壳-电子的Object
  • screen: API
  • nativeImage Electron.DesktopCapturer -电子的屏幕Electron.IpcRenderer Electron.Remote
  • 外壳: Electron.Shell -电子的外壳用法: Electron.NativeImage - Electron's NativeImage API
  • isElectronApp: boolean -指示应用程序是在electron内部执行还是在

内部执行

票数 27
EN

Stack Overflow用户

发布于 2017-08-04 08:23:39

简单的步骤:

  1. 构建angular应用程序(例如: ng build)
  2. 将文件从dist目录复制到电子项目(index.html bundle.js等)
  3. 运行电子应用程序<代码>H29<代码>G210
票数 3
EN

Stack Overflow用户

发布于 2021-09-20 01:37:26

我刚刚成功地从一个angular应用程序构建了一个桌面应用程序,下面是步骤:

1.将目录切换到您的angular应用程序并安装电子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd my-angular-app/
  
npm i -D electron@latest

2.创建电子条目文件在项目的根目录下创建main.js文件。该文件将是电子应用程序的主要入口点,并将包含桌面应用程序的主API。

main.js内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "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文件夹启动桌面应用程序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  ...
  "scripts": {
   "electron": "ng build --base-href ./ && electron .",
   ...
  }
 ...
}

5.更新angular以设置构建目录

在angular.json中,按照我们在main.js文件中设置的/dist/index.html设置构建目录。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...,
"architect": {
  "build": {
    "builder": "@angular-devkit/build-angular:browser",
    "options": {
      "outputPath": "dist",

6.运行应用程序在所有条件相同的情况下,在运行run命令后,您现在应该会看到应用程序已在桌面窗口中运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm run electron

7.构建(打包)应用程序:

使用工具的

您可以使用以下工具分发应用程序:

  1. electron-forge

  1. electron-builder

  1. electron-packager

这些工具将负责您最终获得可分发的Electron应用程序所需的所有步骤,例如捆绑您的应用程序、重新标记可执行文件以及设置正确的图标。

下面的是如何用电子伪造打包的

将Electron Forge添加为应用程序的开发依赖项,并使用其导入命令来设置的脚手架:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm install --save-dev @electron-forge/cli
npx electron-forge import

Forge 2.使用的make命令创建一个可分发文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm run make

Electron Forge创建您的包所在的out文件夹:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 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

我希望这对很多人有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45500750

复制
相关文章
寻找学习资源的三种方式
第一种,对外部资料的搜索,比如百度、微信、得到等其他领域APP内进行搜索,网页搜索如果有条件请使用google搜索。没有条件也推荐用必应搜索。
石云升
2022/08/25
6630
寻找学习资源的三种方式
三种不同的负载均衡类型
未使用负载均衡 这种情况下用户直接与web服务器进行连接,且该服务处于单点得状态,如果we server挂掉了,那么后续的所有连接都不回成功,同样的如果访问用户量比较大,因为服务器繁忙的原因可能有
小小科
2018/05/02
1.1K0
三种不同的负载均衡类型
Hook:如何高效双向链接不同类型的信息资源?
上周二晚上的直播里,我给你谈了「知识网络的链接」。这是朋友圈里小伙伴热情洋溢的留言记录。
王树义
2021/08/26
1.3K0
Hook:如何高效双向链接不同类型的信息资源?
解析存储资源盘活系统的三种缓存模式
缓存,是利用局部性原理,将高频操作的数据存放到访问速度更快的介质中,后续读取相同数据时无需再访问慢速设备,从而可以显著降低操作延时,提高读写速度。局部性原理有两种:
存储小白
2023/03/30
3460
java的三种不同注释方式
注释:是一种在程序源代码中插入的不影响程序运行的文字,可以在不妨碍程序运行的同时,使得代码具有更强的可读性(提前注释好代码的作用总是比看一遍代码理解其作用来的快的),既方便自己回头修改与更新代码,也方便了他人阅读自己的代码。
全栈程序员站长
2022/09/08
3270
java的三种不同注释方式
调度的三种类型
活动调度 在活动调度基础上通过更改机器上的加工顺序,使至少一个工序可以提前加工,必然导致其他工序完成时间推迟。也就是说,在活动调度中,在保留可行性的前提下,没有任何工序可以插入加工时间表前面的空隙中。
mwangblog
2019/01/23
2K0
调度的三种类型
VAE的三种不同推导方法
我们将VAE与GAN都可以放到分布拟合的框架下考虑,简单说,就是有一个未知的真实数据分布,我们想要表示该分布。而VAE最精髓的步骤之一,就是使用隐变量,将数据分布的表征分为两步。
CreateAMind
2019/10/14
2.7K0
ANR的三种类型
ANR一般有三种类型: KeyDispatchTimeout 1:KeyDispatchTimeout(5 seconds) –主要类型 按键或触摸事件在特定时间内无响应 BroadcastTimeout 2:BroadcastTimeout(10 seconds) BroadcastReceiver在特定时间内无法处理完成 ServiceTimeout 3:ServiceTimeout(20 seconds) –小概率类型 Service在特定的时间内无法处理完成
小小工匠
2021/08/16
8320
线程的三种创建方式
继承Thread类 1. 自定义线程类,继承Thread类 2. 重写run方法,编写线程执行体 3. 创建自定义线程类对象,该对象调用start()方法开启线程 public class TestThread1 extends Thread{ @Override public void run() { //线程执行体 for(int i = 0; i <10;i++){ System.out.println("线程正在执行****
高大北
2022/06/14
2140
创建线程的三种方式
1)继承Thread类,重写run方法 2)实现Runnable接口创建线程 3)使用Callable和Future创建线程
名字是乱打的
2022/05/13
2360
23_同时创建父子资源 & 创建资源集合
http://mpvideo.qpic.cn/0bf2qyassaab3eapjq6lqzpvdbwdfgdackia.f10002.mp4?dis_k=3a1d6e9ce931af6abc284df
宿春磊Charles
2022/03/29
3570
java创建线程的三种方式
想写的基础性文章已达90篇文章了,无论是基础性技术文章还是生活所感到这篇就结束了,感谢一路陪伴的读者和朋友,感谢过去的自己,你陪我成长,我陪你长大。
码农王同学
2020/03/25
3620
java创建线程的三种方式
import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class NewThreadDemo { public static void main(String[] args) throws InterruptedException, ExecutionException {
似水的流年
2019/12/07
5690
Oracle创建主键的三种方式
从trace我们能看到,对T_PK_02加了share模式锁,指定nowait,先创建的约束,然后创建了唯一索引,
bisal
2021/03/20
1.7K0
记住变量类型的三种方式
Python作为一门动态语言,其变量的类型可以自由变化。这个特性提高了代码的开发效率,却也增加了阅读代码和维护代码的难度。
青南
2018/08/30
4950
记住变量类型的三种方式
三种验证类型的https证书
https证书即SSL证书,其三种验证类型是指DV、OV、EV。不同的验证类型适合不同的网站,具体应该怎么选择呢?
柳絮云泡泡
2023/04/07
6590
三种验证类型的https证书
[Nature Machine Intelligence | 论文简读]三种类型的增量学习
从非平稳的数据流中渐进地学习新信息,被称为“持续学习”,是自然智能的一个关键特征,但对深度神经网络来说是一个具有挑战性的问题。近年来,许多用于持续学习的深度学习方法被提出,但由于缺乏一个通用的框架,它们的性能比较困难。为了帮助解决这个问题,作者描述了持续学习的三种基本类型或“场景”:任务增量学习、域增量学习和类增量学习。每一种情况都有自己的挑战。为了说明这一点,作者根据每个场景使用split MNIST和split CIFAR-100数据集,对目前使用的持续学习策略进行了全面的实证比较。作者展示了三种场景在难度和不同策略的有效性方面的显著差异。提出的分类旨在通过形成清晰定义基准问题的关键基础,来构建持续学习领域。
智能生信
2022/12/29
7050
[Nature Machine Intelligence | 论文简读]三种类型的增量学习
Java线程的三种创建方法
1、创建Callable接口的实现类, 并实现cal()方法, 该cal()方法将作为线程执行体,并且有返回值。
背雷管的小青年
2021/02/04
5860
Oracle创建主键的三种方式
从trace我们能看到,对T_PK_02加了share模式锁,指定nowait,先创建的约束,然后创建了唯一索引,
bisal
2021/09/06
2.3K0
Spring创建bean的三种方式
Spring主要从两个角度来实现自动化装配:①组件扫描;②自动装配。组件扫描指的是Spring会自动扫描指定包及其子包下的所有bean,并将其放入spring容器中进行管理,而自动装配则是指对于有相互依赖关系的bean,Spring会将其自动装配到目标bean中,如将repository层的bean自动装配到service层中。
田维常
2019/07/20
4K0

相似问题

如何使用XML创建三种以上颜色的渐变

24

如何使圆形视觉对象的面积均匀地分成三种或三种以上的颜色?

18

REST设计:在哪里创建依赖于其他资源的资源?

13

拉链三种不同类型的单体

25

是否可以在LINQ中创建三种不同的条件,并有三种不同的结果?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文