[toc]

这篇文章中提到了免费图床 sm.ms 的不稳定性,虽然可用动态生成的方式画简单的图表,但对于复杂的图片,图床是必要的,由于对国内图床的不信任以及国外图床的不稳定性,选择用发布 NPM 包的方式白嫖 CDN 加速。

jsDelivr 与 NPM

jsDelivr由ProspectOne维护的公共库,使用的融合 CDN 技术,由 Cloudflare、Fastly、StackPath、QUANTIL 等 CDN 供应商提供了全球超过 750 个 CDN 节点。jsDelivr 在中国大陆也拥有超过数百个节点,因为 jsDelivr 拥有正规的ICP 备案,解决了中国大陆的访问速度优化,实现真正的全球极速低延迟体验。jsDelivr 是免费的、不限制带宽的,可以加速 NPMGithub 内的文件。

同时也可利用国内外各大厂商提供的镜像 CDN,如知乎饿了么Unpkg

eg:

操作步骤

具体思路:用 Github 仓库存放静态文件资源,创建 Release,根据 jsDelivr 的要求,文件访问路径为:

1
https://cdn.jsdelivr.net/npm/[package-name]@[release-version]/[filepath]/[filename].[suffix]

准备仓库

新建或选择一个 GitHub 仓库,在仓库中新建 rawimg/.gitkeepwebpimg/.gitkeep 两个文件来保留空目录。

在仓库中新建package.json 文件,其中 name 表示 [package-name],version为 [release-version](今后每次自动更新)

1
2
3
4
5
6
{
"name": "myname",
"version": "0.0.0",
"description": "some some",
"author": "AAA(@ooo)"
}

获取并配置 token

登录 https://npmjs.com ,点击 Access Tokens-> 点击页面中的 Generate New Token 获取新的 token -> 选择 type 为 Automation -> 点击 Generate Token

复制生成的 token 后进入仓库的 Setting -> 点击 Security 下的 Secrets and variables 下的 Actions -> 点击New repository secret 新建一个 Secret -> Secret Name 为 NPM_TOKEN,Value 是复制的 NPM token,点击 Add secret 添加。

图片转换与发布

webp-batch-convert :webp 图片批量转换。将指定目录内 png/jpg/jpeg/bmp/gif 格式的图片批量转换为 webp 格式,减小图片尺寸。

在仓库的 Actions 中新增:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
name: NPM & WebP

# 在 Release 发布时 或手动执行

on:
release:
types:
- published

workflow_dispatch:

jobs:
publish-npm:
runs-on: ubuntu-latest
# Clone 仓库
steps:
- name: Checkout
uses: actions/checkout@v2
with:
ref: master
# 安装 Node.js
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: "16.x"
registry-url: https://registry.npmjs.org/

# rawimg/ 作为原始图片存储,webpimg/ 作为压缩图片存储处,最后合并。
# 安装相关插件,转换图片。
- name: Install & Convert
run: |
npm install -g webp-batch-convert
cwebp-batch --in rawimg --out webpimg
mv webpimg/*.webp rawimg/

# 发布 NPM 包
- name: Publish Package
run: |
git config --global user.email "**********@**.com"
git config --global user.name "name"
npm version patch
npm publish
env:
NODE_AUTH_TOKEN: ${{secrets.npm_token}}

# 删除 rawimg/ 和 webpimg/ 下的所有文件
- name: Delete Files
run: |
rm -rf webpimg/*
rm -rf rawimg/*
touch webpimg/.gitkeep
touch rawimg/.gitkeep

- name: Push
run: |
git add -A
git commit -m "Publish"
git push origin master

测试

将图片文件上传至仓库的 rawimg/ 文件夹下,新建 Release,将自动修改版本号并发布 NPM 包,无需手动修改 package.json,注意 Tag 不要重复。

等待一会后完成提交,查看提交的图片。

https://cdn.jsdelivr.net/npm/gdpooo@0.0.1/rawimg/0001.webp