关于 Electron
Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。
Electron于2013年作为构建Github上可编程的文本编辑器Atom的框架而被开发出来。这两个项目在2014春季开源。
长期支持
当前并不存在对 Electron 旧版本的长期支持。 如果现在你使用的Electron版本跑得不错,你就可以一直使用这个版本。 如果你想使用新发布的特性,那就升级到更新的版本。
加载器的由来
Electron 更新频繁,新特性多,对旧版本兼容性不高,另外 Electron 基于 Node.js, 而 Node.js 的各种模块又更新的特别频繁,不利于打包构建。
因此,@Medicean将 Electron 修改成加载器模式,在不改变 Electron 的情况下,只针对核心代码进行开发升级。
加载器的原理
这就不得不说 Electron 的原理了,Electron 实际上就是一个更新频繁的加载器。在纯 Electron 的resources目录,有两个文件,分别是default_app.asar
和electron.asar
。
以自身命名的electron.asar
便是加载器的核心,而default_app.asar
算是一个 Demo APP。
简单用法
- Usage: asar [options] [command]
- Commands
- pack|p [options] \<dir> \<output> create asar archive
- list|l [options] \<archive> list files of asar archive
- extract|e \<archive> \<dest> extract archive
加载器
之前是说用的是 electton 的 1.2.3
版本,现在不知道有没有改。
我们在 GitHub 中下载最新版 AntSword-v2.0.1-windows-x64.zip
看看AntSword的electron.asar
和Electron的有什么不同。
另外,AntSword比Electron还多了个loader.asar
--- AntSword/resources/electron/browser/init.js 2018-11-06 03:17:29.000000000 +0800
+++ Electron/resources/electron/browser/init.js 2018-11-06 03:07:57.000000000 +0800
@@ -111,7 +111,6 @@
require('./guest-window-manager')
-/*
// Now we try to load app's package.json.
var packageJson = null
var searchPaths = ['app', 'app.asar', 'default_app.asar']
@@ -126,42 +125,6 @@
continue
}
}
--- 修改
-*/
-/**
- * 中国蚁剑::加载入口
- * 1. 读取当前目录下的`.antSword.json`配置文件
- * 2. 如果该文件不存在,则加载`loader.asar`,如果存在,则加载配置中定义的工作目录`workdir`
- * 3. 加载程序负责初始化工作目录,并保存对应配置文件
- */
-var packageJson = null;
-var searchPaths = [];
-try {
- // 如果存在工作目录,则第一加载工作目录
- var AS_CONFIG = JSON.parse(fs.readFileSync(
- path.join(process.resourcesPath, '.antSword.json')
- ));
- var AS_WORKDIR = AS_CONFIG['workdir'];
- // if ((typeof AS_WORKDIR === 'string') && AS_WORKDIR.length > 0) {
- if (fs.existsSync(AS_WORKDIR)) {
- searchPaths.push(AS_WORKDIR);
- process.env.AS_WORKDIR = AS_WORKDIR;
- }
-} catch (e) {}
-searchPaths.push(
- path.join(process.resourcesPath, 'loader.asar')
-);
-
-var i, len, packagePath
-for (i = 0, len = searchPaths.length; i < len; i++) {
- packagePath = searchPaths[i]
- try {
- packageJson = JSON.parse(fs.readFileSync(path.join(packagePath, 'package.json')))
- break
- } catch (error) {
- continue
- }
-}
if (packageJson == null) {
process.nextTick(function() {
中国蚁剑::加载入口
- 读取当前目录下的
.antSword.json
配置文件 - 如果该文件不存在,则加载
loader.asar
,如果存在,则加载配置中定义的工作目录workdir
- 加载程序负责初始化工作目录,并保存对应配置文件
一目了然
path.join(process.resourcesPath, '.antSword.json')
也就是资源目录下的.antSword.json是一个配置文件
具体什么情况,就直接看代码逻辑了!
如果不存在,就加载loader.asar。
asar e loader.asar loader
具体代码我就不贴了,就是到 Github 去下载antSword的源码,自设置代码保存路径,下载完后将代码保存路径存放到.antSword.json中。
以后启动就每次加载你下载的源码了。
网的问题导致经常 GG 怎么破?
既然知道保存路径等原理,那么就自己去下载,然后修改保存路径就是了。
别再问为啥了