本篇意在建立一个上传到GitHub repo自动发布package到npm空间的npm图床
建立用于储存图片等静态资源的npm图床
可以放置js、css、图片(最好带上hash)等不经常变动的资源。
准备工作
准备工作网上有很多教程,这里不重复造轮子。请搜索“npm图床”
需要:
- npm账号,创建一个
token
; - GitHub账号:创建一个repo,并在repo的
setting
创建一个名为NPM_TOKEN
的secrets,值为上面的token
。
创建package.json
该文件指定了要上传的图床的名字和图床版本(不需要事先在npm空间创建一个空的package);其中名字不能和现有的package重复,所以写的尽量长。
1 | { |
看好名称写就行,version
尽量和我一样就行。
创建GitHub action
GitHub action
可以在你把文件push或者release到repo时自动执行自定义命令,这里我们让他自动把我们push的图片发布到npm空间,使资源能通过npm cdn访问。
在reop的上方点击Action
,然后点击new workflow
,之后点击set up a workflow yourself
,名字随便(我这里是npm-publish.yml),之后填入以下信息:
1 | name: npm-publish |
其中的master
要换成你branch
(分支)的名字。NPM_TOKEN
就是最开始在secrets填写的token
,因此名字要对应上。email
和user_name
可以随便写。
上传图片
使用图床工具或者手动上传到GitHub repo就能自动发布到npm空间,可以看到npm包的版本version
变化了(npm不支持覆盖发布,所以版本一定会变化),同时.json
文件里面的版本也变化了,这得益于GitHub action。
这里推荐一个图床工具吧,只用于GitHub的,比较轻量,使用浏览器就行。
使用图片
提供几个国内能用的npm cdn
1 | https://npm.onmicrosoft.cn/, |
使用格式为:
1 | https://{cdn}/{npm_name}@{version}/path/to/resource.ext |
例如
1 | https://jsd.cdn.zzko.cn/npm/html-hosting-for-xp@1.0.1/%E5%9C%A8python%E4%B8%AD%E8%BF%90%E8%A1%8Cbash%EF%BC%88windows%EF%BC%89.html |
freecdn-js可以把资源的响应头中的mime
改成text/html
(而不是原来的text/plain),从而能够让浏览器渲染网页。我写的脚本支持自动把用于写作博客.md文件转换为对应的html cdn列表。见前言
建立用于储存html静态资源的npm图床
同样图床可以储存html文件。我是在本地编译好博客然后发布到GitHub repo的,因而在push之后依然可以在action中把html发布到npm空间。
1 | { |
这里的package.json
多了一个files
的key
,表示只发布html文件到npm空间。files
是一个列表(array),和.gitignore文件的写作规则一样。
这里的action中的.yml
文件和储存图片的repo的.yml
一样,但是要删去npm version patch
这行。
npm version patch
的作用是更新version,在本地发布html之前(hexo d),在命令行输入npm version patch
就能更新本地的package.json
中的version(换而言之,在更新version之前,本地的package.json
和.yml
内容和目录
要和GitHub repo的一致,然后push更新了version之后的.json
之后,让action自动部署,发布html到npm空间)
如果用我的命令行上传博客会多次push本地文件,但是只在push html之前会更新version,那么之后的push会因为没有更新version而action部署失败,但是事实上没有什么影响
脚本的使用
脚本链接见前言。如果你要使用npm空间,要在config.py
中写上你的npm包名,用于查询最新的version。
同样需要注意替换你的branch
1 | f: |