npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@zeromake/electron-asar-updater

v1.1.0

Published

electron's asar updater, 0 dependencies

Downloads

2

Readme

@zeromake/electron-asar-updater

electron 的 asar 更新器,无第三方依赖,仅依赖 node 内置库,fsoriginal-fs 替换使用 vitealias 处理。

使用

electron main

import {app, BrowserWindow} from 'electron';
import {join} from 'node:path';
import {execPath} from 'node:process';

import {AsarUpdater} from '@zeromake/electron-asar-updater';

const asarUpdater = new AsarUpdater({
  version_url: import.meta.env.VITE_UPDATER_URL,
  resource_path: app.getAppPath(),
});

async function upgradeAsarFile(relaunch: boolean) {
    // 有更新文件就进行替换逻辑
    if (await asarUpdater.hasUpgraded()) {
        await asarUpdater.upgrade(relaunch);
        if (relaunch && process.platform !== 'win32') {
            // 非 windows 平台都是可以直接替换文件的,直接使用 electron 的 app.relaunch()
            app.relaunch();
        }
    }
    app.exit();
};

function getVersion() {
  return import.meta.env.VITE_APP_VERSION || app.getVersion();
}

async function createWindow() {
    const browserWindow = new BrowserWindow({
        show: false,
    });

    if (!import.meta.env.DEV) {
        // 主窗口关闭时尝试替换 asar 文件
        browserWindow.on('close', function(event) {
            // 一定要阻止事件否则会导致文件替换不了,应用就退出了
            event.preventDefault();
            // 手动关闭,不重启
            upgradeAsarFile(false);
        });
    }

    browserWindow.once('ready-to-show', async function() {
        browserWindow.show();
        if (!import.meta.env.DEV) {
            const [isUpdater, asarInfo] = await asarUpdater.check(getVersion());
            if (isUpdater) {
                // TODO 通知进行更新
                if (await asarUpdater.download(asarInfo)) {
                    // TODO 通知需要重启,用户确认
                    // 替换文件,windows 下会启动一个 vbs 脚本进程尝试不停的替换,必须要退出该应用才可以正确的替换
                    await upgradeAsarFile(true);
                } else {
                    // TODO 通知下载更新文件失败
                }
            }
        }
    });
}