xxxxxxxxxxPS D:\mytest\cdn> tree /f seldom文件夹 PATH 列表卷序列号为 00000044 CF0D:74A5D:\MYTEST\CDN\SELDOM seldom-main.css seldom-utilities.css XTestRunner_logo.jpg没有子文件夹xxxxxxxxxxhttps://cdn.jsdelivr.net/gh/qingdog/cdn/seldom/seldom-main.csshttps://cdn.jsdelivr.net/gh/qingdog/cdn/seldom/seldom-utilities.csshttps://cdn.jsdelivr.net/gh/qingdog/cdn@1.7.5/seldom/seldom-utilities.csshttps://qingdog.netlify.app/seldom/seldom-utilities.csshttps://seldom.pages.dev/seldom-utilities.csshttps://qingdog-cdn.pages.dev/seldom/seldom-utilities.css# 图片https://raw.githubusercontent.com/qingdog/cdn/v1.7.5/seldom/XTestRunner_logo.jpghttps://cdn.jsdelivr.net/gh/qingdog/cdn/seldom/XTestRunner_logo.jpg使用方法:https://cdn.jsdelivr.net/gh/你的用户名/你的仓库名@发布的版本号/文件路径
例如:
xxxxxxxxxxhttps://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@1.0/images/trhx.pnghttps://cdn.jsdelivr.net/gh/TRHX/CDN-for-itrhx.com@2.0.1/css/style.css https://cdn.jsdelivr.net/gh/moezx/cdn@3.1.3//The%20Pet%20Girl%20of%20Sakurasou.mp4注意:版本号不是必需的,是为了区分新旧资源,如果不使用版本号,将会直接引用最新资源,除此之外还可以使用某个范围内的版本,查看所有资源等,具体使用方法如下:
xxxxxxxxxx// 加载任何Github发布、提交或分支https://cdn.jsdelivr.net/gh/user/repo@version/file// 加载 jQuery v3.2.1https://cdn.jsdelivr.net/gh/jquery/jquery@3.2.1/dist/jquery.min.js// 使用版本范围而不是特定版本https://cdn.jsdelivr.net/gh/jquery/jquery@3.2/dist/jquery.min.js https://cdn.jsdelivr.net/gh/jquery/jquery@3/dist/jquery.min.js // 完全省略该版本以获取最新版本https://cdn.jsdelivr.net/gh/jquery/jquery/dist/jquery.min.js // 将“.min”添加到任何JS/CSS文件中以获取缩小版本,如果不存在,将为会自动生成https://cdn.jsdelivr.net/gh/jquery/jquery@3.2.1/src/core.min.js // 在末尾添加 / 以获取资源目录列表https://cdn.jsdelivr.net/gh/jquery/jquery/Cloudflare Workers 允许你运行自定义的 JavaScript 代码来处理 HTTP 请求。你可以编写一个 Worker 来从 GitHub 仓库中获取文件并作为 CDN 提供服务。这个选项稍微复杂一些,但提供了更多的自定义能力。Netlify 是一个静态网站托管服务,它可以从 GitHub 仓库自动部署网站。你可以利用 Netlify 的 CDN 功能来托管静态资源。Netlify 提供了免费计划,并支持自定义域名和 SSL。jsDelivr 可以加载 github 仓库里 release 包里面的文件内容CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
-- 百度百科
通俗的来讲CDN主要有两个功能:
A free, fast, and reliable Open Source CDN for npm, GitHub, Javascript, and ESM.
-- from https://www.jsdelivr.com/
简单来说就是它可以为开放资源(比如 npm/github release等)提供CDN服务。
网络分布:https://www.jsdelivr.com/network#map
可以看到在中国也有好几台服务器,国内使用也可以完全不用担心速度。
通过jsDelivr 可以加载 github 仓库里的文件内容。
xxxxxxxxxxhttps://cdn.jsdelivr.net/gh/你的用户名/你的仓库名@发布的版本号/文件路径
例如:https://cdn.jsdelivr.net/gh/specialCoder/cdn@0.1.3/public/jquery/jquery.min.js
就是加载 v0.1.3版本下的这个文件:https://github.com/specialCoder/cdn/blob/main/public/jquery/jquery.min.js
| 描述 | 内容 |
|---|---|
| 用户名 | specialCoder |
| 仓库名 | cdn |
| relaese版本号 | 0.1.3 |
| 文件路径 | /public/jquery/jquery.min.js |
以 jquery 为例子:https://github.com/jquery/jquery
xxxxxxxxxx// 使用版本范围而不是特定版本https://cdn.jsdelivr.net/gh/jquery/jquery@3.2/dist/jquery.min.js https://cdn.jsdelivr.net/gh/jquery/jquery@3/dist/jquery.min.js// 完全省略该版本以获取最新版本https://cdn.jsdelivr.net/gh/jquery/jquery/dist/jquery.min.js// 将“.min”添加到任何JS/CSS文件中以获取缩小版本,如果不存在,将为会自动生成https://cdn.jsdelivr.net/gh/jquery/jquery@3.2.1/src/core.min.js
xxxxxxxxxx// 加载任何Github发布、提交或分支https://cdn.jsdelivr.net/gh/user/repo@version/file// 在末尾添加 / 以获取资源目录列表(返回以html文件,页面中展示列表)https://cdn.jsdelivr.net/gh/jquery/jquery/
通过上面我们知道了 jsDelivr 可以加载 github release 下的内容,接下来我们需要:
访问 https://github.com/ 创建,目前创建 public 仓库获取文件是没有问题的(private 仓库还没试过)。
然后把仓库代码克隆到本地,往仓库里添加你需要的文件,然后提交到远程即可。
tag 与 release 【待补充】
在仓库主页,点击右边区域 Release 按钮:
点击 「创建一个新的 relaese」:
创建 release:
输入完毕然后选择 「Publish relasese」就可以了。
使用 github action 来实现自动发布:
.github/workflow/publish.yml 内容:
xxxxxxxxxxname: release CIon:push:branches:- mainjobs:build:runs-on: ubuntu-lateststeps:- name: Checkoutuses: actions/checkout@v2- name: 读取当前版本号id: versionuses: ashley-taylor/read-json-property-action@v1.0with:path: ./package.jsonproperty: version- name: Releaseuses: actions/create-release@masterenv:GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}with:tag_name: v${{steps.version.outputs.value}}release_name: v${{steps.version.outputs.value}}body: Release v${{steps.version.outputs.value}}draft: falseprerelease: false
至此,github部分完成。
我们实现了自制CDN,并且可以自动发版。这样就可以愉快的使用了~~
思考🤔 如何把它做成一个接口??这样我们在文件需求较少的时候就省去了购买 文件存储的花销。