昨晚临睡前无意间看到别人写的文章《npm图床的使用技巧》这时候我才发觉原来还有Npm图床的方法!啊!我怎么没想到!!不过确实很多人没提到过这个方法,这方法也是稍微麻烦点,要我选肯定还是选jsdelivr,省后面的流程。不过昨晚照着流程做下来,其实蛮简单的,前置做好了,后面发布就简单多了。
我也记录下备忘吧,有时候看到文章自己去测试就忘记记录,赶紧趁着还有记忆写下来!

注册&创建仓库

github大家应该都会注册了,仓库创建自己容易记得住的名称就行,那篇博文还有个picgo的流程,我以前用过这软件但是后来用不到了,还是自己写git命令提交比较顺手。如果有在用picgo的小伙伴可以按照那篇博文设置下。

大小限制

首先要注意github和jsdelivr都有大小限制:

  • GitHub图床仓库大小不能超过 1G。因为GitHub原则上是反对仓库图床化的,当仓库超过 1G 后会有人工审核仓库内容,如果发现用来做图床,轻则删库重则封号。需注意。
  • jsDelivr加速的单文件大小为50M。这也就限制了单张图片大小上限。
  • jsDelivr+npm有100MB包大小限制
  • npm饿了么节点没有大小限制

npm流程

  1. 需要注册npm账号,可以去npm官网创建下,然后邮箱验证即可。
  2. 在头像下拉表点击Account,在Two-Factor Authentication处启用2FA双重认证,记住,这部分十分重要!会关联到登录账号和发布验证的部分。官方文档:2FA双重认证,我使用的是移动设备方式,安装Google Authenticator即可,后续扫描二维码添加账号成功。
  3. 仓库克隆到本地,如果是第一次创建仓库可以克隆下,本地已有项目可以忽略这一步。
    git clone git@自己仓库地址
  4. 在本地仓库按shift+鼠标右键打开CMD终端,将npm节点切换回原生源:
    npm config set registry https://registry.npmjs.org
  5. 添加本地npm用户设置:
    #仅第一次使用需要添加用户,之后会提示你输入你的npm账号密码以及注册邮箱
    npm adduser
    #非第一次使用直接登录即可,之后会提示你输入你的npm账号密码以及注册邮箱
    npm login
  6. npm初始化:
    npm init
    另外可以去npm官网查下你起的仓库名有没有重名,没搜到说明正好还没人用。
    接下来要写一些包的信息,放心,信息填写很简单:
    #npm包名称,建议用id+仓库名,可以避免重名
    package name:sarakale-assets
    #版本号
    version:1.0.0
    #描述,可以不写
    description:我的个人仓库
    #入口点,默认即可
    entry point:
    #测试命令,默认即可
    test command:
    #关联的github仓库,也可以不写
    git repository:
    #关键词,也可以不写
    keywords:
    #作者名
    author:sarakale
    #许可证,默认即可
    license:
    最后会输出一段package.json,请求确认,输入yes即可。
  7. 最后输入发布命令
    npm publish
    注意这部分后面会有输入验证码的过程,我昨晚卡在这好久,后来才发觉要去开启2FA认证,开启双重认证后就发布成功了。

版本更新

npm更新每次要输入npm publish很麻烦的话,可以在package.json修改version版本号,然后输入以下命令即可。

npm version patch

关于版本号

根据这篇文章《解放双手 - npm版本自定义更新》来看,npm版本号如果写@latest可能会造成不稳定,为避免回源,尽量写@1.0.0详细版本号,文件会永久缓存。

图片地址引用

图片地址引用很简单,就和jsdelivr一样的,npm只需要输入包名和版本号即可

https://npm.elemecdn.com/npm包名@版本号/img/index.png
例子:
https://npm.elemecdn.com/sarakale-assets@1.0.0/sarakale.jpg

CDN加载:

# jsDelivr+github链接
https://cdn.jsdelivr.net/gh/[GithubUserName]/[AssetsRepo]/img/index.png
# jsDelivr+npm链接
https://cdn.jsdelivr.net/npm/[NpmPackageName]/img/index.png

npm比jsdelivr很大优点是,节点有很多,可以任意挑一个使用。目前节点有:

#百度节点
https://code.bdstatic.com/npm/:package@:version/:file
#知乎节点,回源是Unpkg
https://unpkg.zhimg.com/:package@:version/:file
#饿了么节点1,回源是JSdelivr
https://npm.elemecdn.com/npm/:package@:version/:file
#饿了么节点2,回源是JSdelivr
https://github.elemecdn.com/npm/:package@:version/:file

也可以利用unpkg自建。(UNPKG是一个内容源自npm的全球快速CDN。它部署在cloudflare上,在大陆地区访问到的是香港节点。所以速度也不错。)

https://unpkg.com/npm/:package@:version/:file

图床列表

最后总结下目前的图床有哪些吧。

图床名称使用体验
新浪微博相册早些年我博客就用的微博相册,还蛮好用的,只可惜后来开启了防盗链,啧啧。不过看github还有人维护图床插件WeiboPicBed,至于有没有效果我没用过
七牛云存储这个也用过,后来回收了个人测试域名就没用过了……
SM.MS后来我用了这个图床,但是后来渐渐地变慢了,也不再使用了。
路过图床偶尔用过,速度还不错
去不图床国内图床,没有使用过
Z4A图床国内图床,没用过
聚合图床图片分发图床,一个节点挂了可以从其他备份节点读取
Imgur国外的图床,很可惜国内无法访问,需要挂梯子
photobucket国外图床,需要挂梯子
postimages这个也不错,但我记得大小有限制?
imgbox国外图床,最大只能上传10MB
imgbb国外图床,收费
BackBlaze详见这篇文章链接
Github+JSDelivr流传最广的白嫖方案…然而现在jsd已经不稳定了
npm+任意节点稳定可靠,国内有很多节点可以选择
Deta Drivedeta也出了云硬盘服务,需要写命令行,看官方文档操作来

大概就这些了,国内大厂存储商其实算是可靠稳定的吧,就是要花点钱……比如又拍云、阿里云、腾讯等,其他的嘛,可以买VPS服务器啥的,当然这就不是我了解的方向了。

图片缓存服务

这个我也才知道,查了下,它能做到如下:
可以将有防盗链的图片引用到网页,并成功显示。
可以将http图片引用到https页面而不出现证书问题。
可以将xxx的图片,成功加载。
可以将比较慢的图片资源,加快显示。

【国内网宿节点,只能加载特定图床图片如imgur】
https://search.pstatic.net/common/?src=
【Akamai节点,没有使用限制】
https://imageproxy.pimg.tw/resize?url=
【CloudFlare节点】
https://images.weserv.nl/?url=
【CloudFlare节点】
https://pic1.xuehuaimg.com/proxy/

后记

图床的过程真是一波三折……只要哪个挂了每次都要大量迁移,真是太麻烦了!(ㄒoㄒ)好多时候我也没看到比较好的文章,自己也走了不少弯路,其实我是从小伙伴友链中无聊点击看到的,然后才知晓其他用法,一看相见恨晚!看着看着也沉迷上看科技文章了,我可喜欢看大佬们分享文章了,能增长见识,又可以学到新技术~所以要多看看博客,多去逛一逛~不过好多时候我不敢交换友链,很害羞(✿◡‿◡)有些大佬交换友链要求蛮高的…所以就只能默默路过观看,自己写个经验记录也不错。
目前jsd已经没指望了,本站图片已经全面更换npm源了,这下应该加载会快点了吧!小伙伴如果遇到哪个图片挂了可以在评论里说一声!我去修一修!
图床之路还要走一段时间……慢慢看造化吧……

图床替换方案

近期elemecdn节点回源失效,但之前缓存还在,目前解决方法是换个稳定的服务器,或者去看下面的文章,注意要规范使用,严禁滥用。
免费JSD镜像使用手册
AfDelivr —— Jsdelivr npm(国内),ElmCDN的优质替代方案

参考文章

1、npm图床的使用技巧
2、图床的千层套路
3、使用gulp-replace实现全局替换jsd cdn加速链接(包括插件)
4、SpeedUp!使用黑科技为你的网站提速
5、npm图床搭建