vue打包上傳cdn實現(xiàn)自動化部署

大家都知道基于cdn訪問的資源加載速度會大大優(yōu)于直接訪問部署在服務(wù)器上的資源的加載速度,本文基于阿里云及其相關(guān)產(chǎn)品,做了vue-cli2.0腳手架(公司原有的項目比較老)租冠,做了一些vue打包一鍵上傳cdn并自動部署的嘗試(不必再打包上傳服務(wù)器更新資源)茄螃,并對踩的一些坑做一些說明。

以下這些都是需要的準備工作

沒有嘗試過的小伙伴可能覺得好麻煩慈俯,其實也還好,點一點就好了拥峦,又不用敲代碼贴膘!


微信截圖_20210820160341.png

1.準備好服務(wù)器,并且申請域名并綁定好域名略号,這里不做贅述刑峡。

2.開啟CDN服務(wù),我選擇了按流量收費玄柠,并且在cdn域名管理內(nèi)添加域名突梦,選擇全站加速,源站信息可以填寫你的服務(wù)器ip羽利,阿里云上有非常詳細的操作步驟阳似。

微信截圖_20210820160805.png

添加好之后會自動生產(chǎn)一個CNAME


微信截圖_20210820161034.png

此時去你的域名管理-解析設(shè)置內(nèi),加入CDN內(nèi)給你配置的CNAME解析


微信截圖_20210820161616.png

阿里云上也有非常詳細的配置操作說明铐伴,配置成功后Ping一下 看看能不能對應(yīng)上撮奏,對應(yīng)上了說明配置成功了。


微信截圖_20210820162044.png

3.開啟oss(對象存儲)服務(wù)

我5塊錢開通了半年当宴,開通后新建Bucket


微信截圖_20210820162314.png

這個有個注意點畜吊,bucket的版本控制最好不要開,前端其實也不需要户矢。然后讀寫權(quán)限玲献,要設(shè)置成公共讀,不然你傳上去的資源梯浪,你客戶端可能訪問不到哦捌年。

原理:

這里簡單說一下CDN的工作方式:

當你的oss綁定了cdn之后,你可以通過訪問cdn的域名來訪問你的oss

例如你在 OSS 上傳了 a.zip 這個文件挂洛,你訪問了cdn的域名想下載這個文件礼预,cdn先在自己的緩存中查找 a.zip 這個文件,發(fā)現(xiàn)沒找到虏劲,于是去源站oss找這個文件托酸。如果找到了褒颈,就會放到cdn自己的緩存中。并根據(jù)你設(shè)定的時間保存緩存励堡。這個過程就稱為 回源 谷丸, 這個時候oss流出的流量就叫 回源流量 (0.15元/GB)

當下次你再訪問cdn下載 a.zip 這個文件的時候,因為上次cdn已經(jīng)前往oss緩存過這個文件了应结,所以這次的請求不經(jīng)過 OSS 刨疼,由cdn自主把它擁有的緩存文件發(fā)給你 , 也就是說 理論上不產(chǎn)生OSS的流量費用

所以鹅龄,當你使用CDN之后币狠,只有第一次訪問這個文件會產(chǎn)生OSS的回源流量,只要你在CDN中設(shè)置的緩存足夠久砾层,每次訪問的流量理論上幾乎不經(jīng)過OSS,而是產(chǎn)生CDN的流量費用贱案。

ok,到這里肛炮,你準備工作就全部完成了,接下來是代碼環(huán)節(jié)宝踪。

1.要寫個腳本要把你的資源上傳到oss內(nèi)侨糟,官網(wǎng)上有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方法,實現(xiàn)同步化厉膀,方便在失敗后重試處理
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 路徑溶耘,按照原文件夾結(jié)構(gòu),進行上傳
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/', [])

// 遞歸執(zhí)行文件上傳操作
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可以通過阿里云右上角點擊頭像出現(xiàn)的accessKey管理頁面進去查看服鹅,bucket就是你的bucket名稱凳兵。
執(zhí)行

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

就會發(fā)現(xiàn)文件都傳上去了


微信截圖_20210820163509.png

微信截圖_20210820163545.png

傳上去之后你去預覽文件,可能會發(fā)現(xiàn)是直接下載文件的企软,而且文件后面有一大串參數(shù)庐扫?expire=XXXX什么的,這種情況下仗哨,這些資源是無法直接引入到我們的頁面中的形庭,前面講到了要設(shè)置資源為公共讀,然后要配置一下自有域名厌漂,配置完成之后萨醒,這個url就可以直接拿來用了。


微信截圖_20210820164146.png

2.文件傳上去了苇倡,下面只需要配置打包的時候資源引入路徑為CDN上的url就可以了验靡。

微信截圖_20210820164434.png

vue-cli2.0也簡單倍宾,紅框里面配置成自有域名就可以了。3.0的話可以參考:
https://segmentfault.com/a/1190000018915895
到此為止胜嗓,操作就都結(jié)束了高职。以后要做的就是npm run build之后,再執(zhí)行一下node index辞州,項目就自動部署了怔锌,然后到時候index.js的目錄層級結(jié)構(gòu)要變一下,最好是和package.json同級变过,然后對應(yīng)的尋找dist的目錄也改一下埃元。到時候cdn上的Index.html文件的url訪問路徑,便是我們項目的首屏訪問路徑媚狰。
微信截圖_20210820164937.png

這篇文章也寫的不錯哦岛杀,大家可以看下:
https://blog.m-jay.cn/?p=85

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市崭孤,隨后出現(xiàn)的幾起案子类嗤,更是在濱河造成了極大的恐慌,老刑警劉巖辨宠,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遗锣,死亡現(xiàn)場離奇詭異,居然都是意外死亡嗤形,警方通過查閱死者的電腦和手機精偿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赋兵,“玉大人笔咽,你說我怎么就攤上這事∨冢” “怎么了拓轻?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長经伙。 經(jīng)常有香客問我扶叉,道長,這世上最難降的妖魔是什么帕膜? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任枣氧,我火速辦了婚禮,結(jié)果婚禮上垮刹,老公的妹妹穿的比我還像新娘达吞。我一直安慰自己,他們只是感情好荒典,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布酪劫。 她就那樣靜靜地躺著吞鸭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪覆糟。 梳的紋絲不亂的頭發(fā)上刻剥,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音滩字,去河邊找鬼造虏。 笑死,一個胖子當著我的面吹牛麦箍,可吹牛的內(nèi)容都是我干的漓藕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挟裂,長吁一口氣:“原來是場噩夢啊……” “哼享钞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起诀蓉,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤栗竖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后交排,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡饵筑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年埃篓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片根资。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡架专,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出玄帕,到底是詐尸還是另有隱情部脚,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布裤纹,位于F島的核電站委刘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鹰椒。R本人自食惡果不足惜锡移,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望漆际。 院中可真熱鬧淆珊,春花似錦、人聲如沸奸汇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至戳吝,卻和暖如春浩销,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背骨坑。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工撼嗓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人欢唾。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓且警,卻偏偏與公主長得像,于是被迫代替她去往敵國和親礁遣。 傳聞我的和親對象是個殘疾皇子斑芜,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容