vue打包上传cdn实现自动化部署

大家都知道基于cdn访问的资源加载速度会大大优于直接访问部署在服务器上的资源的加载速度,本文基于阿里云及其相关产品,做了vue-cli2.0脚手架(公司原有的项目比较老),做了一些vue打包一键上传cdn并自动部署的尝试(不必再打包上传服务器更新资源),并对踩的一些坑做一些说明。

以下这些都是需要的准备工作

没有尝试过的小伙伴可能觉得好麻烦,其实也还好,点一点就好了,又不用敲代码!


微信截图_20210820160341.png

1.准备好服务器,并且申请域名并绑定好域名,这里不做赘述。

2.开启CDN服务,我选择了按流量收费,并且在cdn域名管理内添加域名,选择全站加速,源站信息可以填写你的服务器ip,阿里云上有非常详细的操作步骤。

微信截图_20210820160805.png

添加好之后会自动生产一个CNAME


微信截图_20210820161034.png

此时去你的域名管理-解析设置内,加入CDN内给你配置的CNAME解析


微信截图_20210820161616.png

阿里云上也有非常详细的配置操作说明,配置成功后Ping一下 看看能不能对应上,对应上了说明配置成功了。


微信截图_20210820162044.png

3.开启oss(对象存储)服务

我5块钱开通了半年,开通后新建Bucket


微信截图_20210820162314.png

这个有个注意点,bucket的版本控制最好不要开,前端其实也不需要。然后读写权限,要设置成公共读,不然你传上去的资源,你客户端可能访问不到哦。

原理:

这里简单说一下CDN的工作方式:

当你的oss绑定了cdn之后,你可以通过访问cdn的域名来访问你的oss

例如你在 OSS 上传了 a.zip 这个文件,你访问了cdn的域名想下载这个文件,cdn先在自己的缓存中查找 a.zip 这个文件,发现没找到,于是去源站oss找这个文件。如果找到了,就会放到cdn自己的缓存中。并根据你设定的时间保存缓存。这个过程就称为 回源 , 这个时候oss流出的流量就叫 回源流量 (0.15元/GB)

当下次你再访问cdn下载 a.zip 这个文件的时候,因为上次cdn已经前往oss缓存过这个文件了,所以这次的请求不经过 OSS ,由cdn自主把它拥有的缓存文件发给你 , 也就是说 理论上不产生OSS的流量费用

所以,当你使用CDN之后,只有第一次访问这个文件会产生OSS的回源流量,只要你在CDN中设置的缓存足够久,每次访问的流量理论上几乎不经过OSS,而是产生CDN的流量费用。

ok,到这里,你准备工作就全部完成了,接下来是代码环节。

1.要写个脚本要把你的资源上传到oss内,官网上有sdk,这里以node为例:新建一个index.js文件,同级目录下新建一个file文件夹,然后把打包好的dist文件夹丢进去

let OSS = require('ali-oss')
let fs = require('fs')

let client = new OSS({
  region: 'oss-cn-hangzhou',
  accessKeyId: '',
  accessKeySecret: '',
  bucket: 'xxxx'
})

// 使用async+await方法,实现同步化,方便在失败后重试处理
async function put(fileName) {
  try {
    let result = await client.put(fileName, './file/dist/' + fileName)
    console.log('File Upload Success: ', fileName)
  } catch (e) {
    console.log('File Upload Failed: ', fileName)
    // 这里省略异常/失败的重试
  }
}

// 读取打包后的 dist 路径,按照原文件夹结构,进行上传
let readFileList = (path, filesList) => {
  let files = fs.readdirSync(path)
  files.forEach(itm => {
    if (itm) {
      let stat = fs.statSync(path + itm)
      if (stat.isDirectory()) {
        readFileList(path + itm + '/', filesList)
      } else {
        filesList.push(path + itm)
      }
    }
  })
  return filesList
}
let dist = readFileList('./file/dist/', [])

// 递归执行文件上传操作
let i = 0, l = dist.length
let uploadAsset = () => {
  if (i < l) {
    let name = dist[i].split('./file/dist/')[1]
    put(name)
    i++
    uploadAsset()
  }
}
uploadAsset()

accessKeyId,accessKeySecret可以通过阿里云右上角点击头像出现的accessKey管理页面进去查看,bucket就是你的bucket名称。
执行

npm install --save-dev ali-oss
node index

就会发现文件都传上去了


微信截图_20210820163509.png

微信截图_20210820163545.png

传上去之后你去预览文件,可能会发现是直接下载文件的,而且文件后面有一大串参数?expire=XXXX什么的,这种情况下,这些资源是无法直接引入到我们的页面中的,前面讲到了要设置资源为公共读,然后要配置一下自有域名,配置完成之后,这个url就可以直接拿来用了。


微信截图_20210820164146.png

2.文件传上去了,下面只需要配置打包的时候资源引入路径为CDN上的url就可以了。

微信截图_20210820164434.png

vue-cli2.0也简单,红框里面配置成自有域名就可以了。3.0的话可以参考:
https://segmentfault.com/a/1190000018915895
到此为止,操作就都结束了。以后要做的就是npm run build之后,再执行一下node index,项目就自动部署了,然后到时候index.js的目录层级结构要变一下,最好是和package.json同级,然后对应的寻找dist的目录也改一下。到时候cdn上的Index.html文件的url访问路径,便是我们项目的首屏访问路径。
微信截图_20210820164937.png

这篇文章也写的不错哦,大家可以看下:
https://blog.m-jay.cn/?p=85

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容