electron 101

electron相关 tips

简介

electron是用web技术编译原生桌面应用的框架,其基于node.jsChromium。简单来讲就是让程序跑在Chromium中,然后结合node.js,通过ipc通讯,使应用可以突破浏览器沙盒的限制,访问本地资源。electron最重要的特点主要以下两个:

  1. 基于web技术,开放效率高。

  2. 跨平台能力强,一套代码可以几乎无成本生成windows、mac、linux三个平台应用。

xattr and ads

扩展文件属性(extended attributes)

Extended Attributes

Extended Attributes即扩展文件属性, 是文件系统的一个功能。它允许用户将计算机文件与未被文件系统所解释的元数据关联起来。其典型应用包括存储文档作者、普通文本文件的字符编码或者校验码。

  • Linux or macOS

在Linux操作系统中,如果libattr功能在内核设置中被打开,ext2、ext3、ext4、JFS、ReiserFS以及XFS文件系统都支持扩展属性(英文简写为xattr)

Mac OS X 10.4 及以上版本在 HFS+ 文件系统上也支持xattr

JS中可以使用fs-xattr 读取和写入xattr

修改xattr不会修改文件的mtime,故可以将需要存储的数据及time stamp一起存入xattr,读取时通过比较mtime,可以检验数据的时效性。

  • Windows

windows不支持xattr,但是可以使用NTFS的Alternate Data Streams来代替,对应的JS库是 fs-ads

但是需要注意的是,修改ads会改变文件的mtime,所以在保证数据的时效性方面比较麻烦。

采用 atime + size的方法大部分情况可以保证准确性,但并不完备。

upload files or folds recrusively

利用Async-await读取并上传本地文件夹

利用Async-await写了读取本地文件并上传至服务器的程序。

Async-await写起来有种一气呵成的感觉,然而实际业务中要考虑到更为复杂的状态管理却用不了,故记录在这里。

file hash in node

利用node中的加密模块crypto计算文件的hash值

readStream的方式读取文件并同时使用crypto.createHash计算hash值。