(文/开源中国)    

git submodule update --init --recursive

威尼斯城真人赌钱网站 118_xfce.png

Electron

为什么要这样做?第一,conhost.exe
已十分陈旧。它必须使用所有内容的裸机底层,因为它是在创建其他大多数框架之前创建的。第二,它需要保持尽可能底层的级别,而且它是用
C/C++ 编写的,它需要尽可能保持底层的状态以方便提供给第三方使用。

该项目使用 git submodules
包含一些相关依赖,要确保子模块被更新,请在构建器使用如下命令检查:

所谓“生产环境”是指应用程序正式上线运行所用的软硬件环境,多为安装了Linux操作系统的高性能计算机,集中放置在专用机房中,通过网络远程访问。开发者通常还会配置一个“模拟生产环境”来进行发布前的测试——Linux可以在实体机上安装,也可以在其他操作系统管理的虚拟机上安装(例如Win10自带的虚拟机工具Hyper-V),但最简便的方式则是打开Win10的微软应用商店直接安装——这种Linux是基于“适用于Linux的Windows子系统”(Windows
Subsystem for Linux,简称WSL),启动比虚拟机更快,性能也更好。

3.2.1 安装 homebrew

brew 的安装很简单,使用一条 ruby 命令即可,Mac 系统上已经默认安装了
ruby。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

安装完成后,就可以使用 brew 命令了,可以输入命令自检:

brew doctor

也可以参看安装版本:

brew -v

至于其他 Windows 应用是否有机会用上这种顺滑的输入效果,miniksa
觉得几乎是没机会。这些应用能够以一种简单的方式用任何一门语言来调用一种方法和布局文本(layout
text),而无需手动计算像素或关心它们的字体该采用哪种样式。而恰好 miniksa
手动计算像素、滑动区域和数学应用区域等的方式正是使得 WSL
默认终端输入速度更快的原因。

构建一个全新终端

现在就让我们使用WSL来创建一个模拟生产环境,在Win10开始菜单中点击“Windows系统”>“控制面板”>“程序”>“启用或关闭Windows功能”,在项目列表中勾选“适用于Linux的Windows子系统”,点击“确定”并重启操作系统。进入微软应用商店搜索“Linux”即可找到多个Linux发行版,它们看起来风格各异,但都使用同样的Linux内核——推荐你安装Ubuntu,对新手来说更为友好。

1.3、安装打包工具 electron-packager

npm install -g electron-packager

同样,mac 系统需要在管理员权限下安装哟

sudo npm install -g electron-packager

打包需要注意的点会在后面讲解

很快,负责此项目的 Windows
开发团队成员(@miniksa)对 Nick
的疑问进行了解答。

这项大修工作导致创建了几个对 Windows
上的任何终端实现都有用的关键组件,包括一个新的基于 DirectWrite
的文本布局和渲染引擎、一个能够存储 UTF-16 和 UTF-8
的文本缓冲区以及一个VT解析器/发射器。

你也可以安装其他更专业的SSH客户端,例如PuTTY和Bitvise SSH Client
SSH
Client登录Ubuntu运行示例程序的效果如下:

3.2.1 使用 brew 安装 Wine

  • 打开终端,输入以下命令行:

brew install wine

出现以下错误,提示我们安装缺失组件,下一步就是安装缺失组件了。

提示安装缺失组件

  • 安装缺失组件 Xquartz
    浏览器打开https://xquartz.macosforge.org/landing
    下载并安装即可

  • 重试安装 Wine

brew install wine

接下来的事就是等待了,我等了一个上午吧~~ that’s a really long time

  • 使用命令行打包 Win32 安装包

electron-packager ./ cyyDemo --platform=win32 --arch=x64 —version=1.3.5 --out=dist/ --overwrite --ignore=node_modules/electron-* --ignore=node_modules/.bin --ignore=.git --ignore=dist --prune

原创作品,如需转载,请与作者联系,否则将追究法律责任。

miniksa 解释道,notepad.exe
确实很轻量,不过在其窗口上也具有多个控件,并且可能在编辑控件中使用某种库、框架来确定其文本布局(也可能正在使用其他库或框架进行国际化支持…),这些都使得它们的输入速度比不上
WSL 默认终端。当然,WSL
也需要进行权衡取舍,它不像其他应用那样提供完全的国际化支持。

nuget restore OpenConsole.sln
msbuild OpenConsole.sln

Linux系统也可以安装桌面环境,虽然WSL的终端窗口不支持图形界面,但是可以通过远程桌面服务来使用——推荐桌面环境Xfce,这据说是Linux的创造者Linus
Torvalds本人的选择哦:

3.1 mac os 环境下打包 mas 安装包

威尼斯城真人赌钱网站 2

同时该终端依然符合我们的目标和要求,以确保它保持快速、高效,并且不会消耗大量内存和电源。

以上命令先对apt源列表文件做复制备份,再用文本编辑器vim打开。请先输入“:%d”清空内容,再按“i”进入插入模式,复制以下文本并在窗口中右击粘贴,设置从中国大陆的镜像源下载软件包:

Electron 是一款可以利用 Web 技术 开发跨平台桌面应用的框架,最初是
Github 发布的 Atom 编辑器衍生出的 Atom Shell,后更名为 Electron
。Electron 提供了一个能通过 JavaScript 和 HTML
创建桌面应用的平台,同时集成 Node
来授予网页访问底层系统的权限。目前常见的有
NW、heX、Electron,可以打造桌面应用。

WSL 的默认终端不像 Electron
等框架那样涉及到许多其他的层或框架,它有一个并不特别的裸窗口,并且没有任何附加组件。他们会从窗口消息(window
messages)而不是某种事件框架((WPF, WinForms, UWP,
Electron))来处理键入的内容,而这些内容是通过内核传输过来的。接着,他们使用
GDI 的 PolyTextOut 将文本直接转储到窗口而不带多余的装饰。

OpenConsole.sln 需要在 Visual Studio 构建或者是使用 MSBuild
在命令行中构建。命令行构建的方法如下:

$ cat /etc/issue # 显示发行版本,例如Ubuntu 18.04.1$ uname -a # 显示内核版本,例如Linux 4.4.0$ pwd # 显示当前路径$ cd / # 切换目录路径$ ls # 列出目录内容$ df -h # 显示文件系统$ python3 # 运行Python3解释器

2.1、项目框架

参看官方的 demo ,一个 Electron 应用的目录结构大体如下:

app/
├── package.json
├── main.js
└── index.html
  • package.json
    可以理解为 android 里面的 mainfest
    文件,里面声明了程序的名称、简介、版本等信息;设置 Electron
    主进程运行的脚本(main.js),即设置程序的入口;设置快捷键,在你的
    CLI(命令行)中可以用 electron . 方便地启动应用。可以看下面例子:

{
    "name": "channel",
    "version": "1.0.0",
    "description": "",
    "main": "main.js",
    "author": "Young",
    "scripts": {
        "start": "electron ."
    }
}
  • main.js
    这个文件是程序的入口,Electron 的主进程将用它来启动并创建桌面应用。

const {app, BrowserWindow} = require('electron')
let win
function createWindow(){
    win = new BrowserWindow({width:800, height:600})
    win.loadURL(`file://${__dirname}/index.html`)
    win.webContents.openDevTools()//开启调试工具
    win.on('close', () => {
        win = null
    })
    win.on('resize', () => {
        win.reload()
    })
}
app.on('ready', createWindow)
app.on('window-all-cloased', () => {
    if(process.platform !== 'drawin' ){
        app.quit()
    }
})
app.on('activate', () => {
    if(win === null){
        createWindow()
    }
})

app 模块:会控制应用的生命周期(例如, 对应用的 ready
状态做出反应),有点像 Application ,对应有各个生命周期会有不同的状态。

BrowserWindow 模块:为你创建窗口。

win 对象:是你应用的主窗口,被声明成 null ,否则当 JavaScript
垃圾回收掉这个对象时,窗口会被关闭。

当 app 捕获 ready 事件,BrowserWindow
创建一个800*600大小的窗口。浏览器窗口的渲染进程会渲染 index.html 文件。

当 app 捕获 resize 事件,BrowserWindow 会重新加载,以此类推。

  • index.html
    这个文件就是我们要呈现出来的网页了。这就需要你自己发挥想象写咯~

Nick 觉得这种顺滑感是其他 Windows
应用都不具备的,甚至是最轻量的 notepad.exe 都未能提供这种输入体验。他还问到,这种 UI
增强功能将来是否会应用于所有 Windows 应用程序。

Windows 控制台主机

$ sudo apt update # 更新软件包列表$ sudo apt list --upgradable # 查看哪些软件包可更新$ sudo apt upgrade python3.6 # 更新Python3.6,不指定名字则更新全部软件包$ sudo apt install python3-pip # 安装Pyhon3.6的pip$ python3 -m pip list # 查看Python3.6的第三方包列表$ sudo apt install python3.7 # 安装Python3.7$ sudo apt install python3.7-venv # 安装Python3.7的venv$ python3.7 -m venv vTest # 基于Python3.7创建一个虚拟环境$ source vTest/bin/activate # 激活一个虚拟环境

3.1.1 在 package.json 中添加安装包依赖

"devDependencies": {
        "electron-prebuilt": "^1.3.5",
        "electron-packager": "latest"
    }

一名开发者(下用 Nick 代称)在 Windows Terminal 的 GitHub repo
中发表了一个不是反馈问题的 issue ——
他只是好奇该终端拥有这种如此顺滑输入的效果是如何实现的。

在对控制台进行大修的同时,我们对其代码库进行了大量的改进。主要是将逻辑实体清晰地划分为模块和类,引入了一些关键的扩展点,用更安全、更高效的STL容器替换了几个旧的、自制的集合和容器,并通过使用微软的
Wil header 库使代码更简单、更安全。

威尼斯城真人赌钱网站 318_linux.png

二、简单开发

那么,我们 Electron 程序到底是怎么跑起来的呢?先看下一个 Electron
项目的基本框架组成吧。

相关文章