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 🙏

© 2026 – Pkg Stats / Ryan Hefner

vite-plugin-reload-cdn

v0.0.3

Published

前端CDN容灾(资源重载)

Readme

vite 插件 CDN 容灾处理

当资源出现资源加载错误时,重载资源,最终回源 oss

使用

npm install vite-plugin-reload-cdn -D

如下在vite.config.js中添加该插件

import { reloadCdnPlugin } from 'vite-plugin-reload-cdn'

plugins: [
  reloadCdnPlugin({
    map: {
      'https://baidu.com': 'http://google.com'
    }
  })
]

签名

// cdn域名
type CDN = string
// oss源站域名
type OSS = string

interface Options {
  map: Record<CDN, OSS>
}

declare function reloadCdnPlugin(options: Options)

前置知识

window.onerror 和 window.addEventListener('error')的区别

window.onerror

全局监听 js 异常

  1. 只能绑定一个,后面的绑定会覆盖前面的
  2. 无法全局捕获资源加载异常
  3. 可以捕获异步错误
  4. 不可以捕获 forEach 中抛出的异常

window.addEventListener('error')

全局监听资源加载异常

  1. 可以绑定多个,多个回调按照绑定顺序执行
  2. 比 window.onerror 先执行
  3. 由于网络请求异常不会事件冒泡到 window,因此必须在捕获阶段将其捕捉到才行,于是 window.addEventListener 设置为 true 在捕获阶段进行,网络请求错误可以捕获
  4. 可以全局捕获资源加载异常的错误
  5. 可以捕获异步错误
  6. 可以捕获 forEach 中抛出的异常

共同点

  1. 都可以捕获 js 运行时错误,前提都是未被 try-catch 捕获

同步资源

通过监听window.addEventListener('error')实现资源重载

异步资源

vite 使用原生支持的import()函数进行资源懒加载

改写 vite 插件vite:build-import-analysis中的__vitePreload方法,这个方法主要做两件事

  1. 资源预加载
  2. 资源按需加载

动态资源

手动通过 document.createElement('script') 加载的资源

手动处理资源重载逻辑