Virink's Blog logo

Virink's Blog

Let life be beautiful like summer flowers, and death like autume leaves.

 浅谈国产神器AntSword

关于 Electron

Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库。 Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的。

Electron于2013年作为构建Github上可编程的文本编辑器Atom的框架而被开发出来。这两个项目在2014春季开源。

长期支持

当前并不存在对 Electron 旧版本的长期支持。 如果现在你使用的Electron版本跑得不错,你就可以一直使用这个版本。 如果你想使用新发布的特性,那就升级到更新的版本。

Electron 文档

加载器的由来

Electron 更新频繁,新特性多,对旧版本兼容性不高,另外 Electron 基于 Node.js, 而 Node.js 的各种模块又更新的特别频繁,不利于打包构建。

因此,@Medicean将 Electron 修改成加载器模式,在不改变 Electron 的情况下,只针对核心代码进行开发升级。

加载器的原理

这就不得不说 Electron 的原理了,Electron 实际上就是一个更新频繁的加载器。在纯 Electron 的resources目录,有两个文件,分别是default_app.asarelectron.asar

以自身命名的electron.asar便是加载器的核心,而default_app.asar算是一个 Demo APP。

asar 格式

简单用法

  • 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

看看AntSwordelectron.asarElectron的有什么不同。

另外,AntSwordElectron还多了个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() {

中国蚁剑::加载入口

  1. 读取当前目录下的.antSword.json配置文件
  2. 如果该文件不存在,则加载loader.asar,如果存在,则加载配置中定义的工作目录workdir
  3. 加载程序负责初始化工作目录,并保存对应配置文件

一目了然

path.join(process.resourcesPath, '.antSword.json')

也就是资源目录下的.antSword.json是一个配置文件

具体什么情况,就直接看代码逻辑了!

如果不存在,就加载loader.asar

asar e loader.asar loader

具体代码我就不贴了,就是到 Github 去下载antSword的源码,自设置代码保存路径,下载完后将代码保存路径存放到.antSword.json中。

以后启动就每次加载你下载的源码了。

网的问题导致经常 GG 怎么破?

既然知道保存路径等原理,那么就自己去下载,然后修改保存路径就是了。

别再问为啥了

-w290
-w157
-w488

本文标题 : 浅谈国产神器AntSword
文章作者 : Virink
发布时间 :  
最后更新 :  
本文链接 : https://www.virzz.com/2018/11/06/how_to_use_antsword.html
转载声明 : 转载请保留原文链接及作者。
转载说明 : 本卡片有模板生成,本人转载来的文章请忽略~~