主頁 > 軟體工程 > 將 Vue.js 專案部署至靜態網站托管,并開啟 Gzip 壓縮

將 Vue.js 專案部署至靜態網站托管,并開啟 Gzip 壓縮

2022-12-02 07:20:10 軟體工程

摘要:關于使用 Nginx 開啟靜態網站 Gzip 壓縮的教程已經有很多了,但是好像沒幾個講怎么在物件存盤的靜態網站中開啟 Gzip 壓縮,其實也不復雜,我們一起來看下~

本文分享自華為云社區《將 Vue.js 專案部署至靜態網站托管,并開啟 Gzip 壓縮》,作者:云存盤開發者支持團隊,

關于使用 Nginx 開啟靜態網站 Gzip 壓縮的教程已經有很多了,但是好像沒幾個講怎么在物件存盤的靜態網站中開啟 Gzip 壓縮,其實也不復雜,我們一起來看下~

1.打包專案

1.1 先安裝 compression-webpack-plugin 插件:

npm install compression-webpack-plugin --save-dev

1.2 在 vue.config.js 中開啟壓縮插件(專案下沒有此檔案可以在根目錄下創建):

const CompressionWebpackPlugin = require('compression-webpack-plugin');
module.exports = defineConfig({
 transpileDependencies: true,
 configureWebpack: config => {
 config.externals = {}
 if (process.env.NODE_ENV === 'production') {
 return {
                plugins: [new CompressionWebpackPlugin({
                    test: /\.js$|\.html$|\.css/, // 壓縮檔案的后綴
                    threshold: 1024, // 對超過 1k 的檔案進行壓縮
 deleteOriginalAssets: true, // 不需要保留壓縮前檔案
 })]
 }
 }
 }
})

1.3 運行 npm run build 打包專案,打包后打開打包產物目錄,可以看到檔案后綴有 .gz

2.開啟靜態網站托管并上傳網站

2.1 創建桶并開啟靜態網站托管

進入物件存盤控制臺,點擊右上角創建桶,

這里桶名需要注意下,全域唯一,不能與其他人的重復,桶策略選擇公共讀

注意:開啟公共讀后,任何人均能訪問你桶內的資料!!強烈建議這個桶僅用作靜態網站托管,不要存放隱私資料
注意:開啟公共讀后,任何人均能訪問你桶內的資料!!強烈建議這個桶僅用作靜態網站托管,不要存放隱私資料
注意:開啟公共讀后,任何人均能訪問你桶內的資料!!強烈建議這個桶僅用作靜態網站托管,不要存放隱私資料

創建后點擊桶名,進入桶配置,點擊靜態網站托管,配置靜態網站

此處示例專案比較簡單,默認首頁和默認 404 頁面均填寫 index.html,不需要配置重定向規則

這個網址即是網站地址

此時點擊打開會提示 404,因為我們還沒有上傳網站檔案,接下來會上傳網站檔案并配置 Gzip 壓縮,

2.1.1 配置域名決議

在配置靜態網站時,可以看到有提示從 22 年 3 月開始 OBS 禁止通過默認域名(桶訪問域名或靜態網站訪問域名)使用靜態網站托管功能,如果是新創建的桶,必須要配置桶域名才能訪問,

點擊左側域名管理,點擊系結用戶域名

設定完成后,需要去自己的域名供應商處將域名 CNAME 指向 OBS 桶域名,等待一會兒決議生效,

2.2 上傳靜態網站并配置 Gzip 壓縮

這里先講兩個錯誤步驟和錯誤的原因原因,太長不看可跳轉 # 2.2.2 正確方案 ,更推薦直接參考 # 3 更進一步--自動設定元資料

2.2.1 試錯手動方案

由于物件存盤的物件名強唯一的,即并不會自動把 xxx.js 指向 xxx.js.gz,此時如果直接把 dist 目錄下檔案上傳到物件存盤并開啟靜態網站托管,會發現瀏覽器找不到 .gz 檔案,會報錯 404,頁面一片空白,

手動版解決方法非常粗暴,直接上傳前把檔案名后綴 .gz 去掉再上傳就行,這里需要記下來都改了哪些檔案的后綴,一會兒要用到,

去除后綴后,請求沒報錯 404 了,但是頁面還是一片空白,這又是為啥?

原因是瀏覽器是根據服務器發來的請求頭來判斷收到的檔案到底是什么型別,再決定該如何處理,如果內容被壓縮了,就必須要顯示的告訴瀏覽需要解壓后才能使用,Nginx 配置后,會自動給回應加上說明告知瀏覽器,但是物件存盤不會主動告知,需要我們處理,

手動處理方法也很粗暴,挨個去設定元資料添加 Content-Encoding: gzip,此處使用 OBS Browser+ 工具,瀏覽器操作類似,

2.2.2 正確方案

  1. 手動將所有物件的 .gz 后綴去掉
  2. 挨個去給去過后綴的物件添加元資料:Content-Encoding: gzip

3. 更進一步 —— 自動設定元資料

本文用的示例專案比較簡單,只有三個檔案需要改,手工改還不麻煩,但是對與復雜專案可能要幾十上百個檔案,處理起來就非常麻煩,程式員的思路就是能代碼解決就不要動手,這里我們使用 資料工坊 DWR 服務自動改檔案名 + 改后綴,這里的介紹比較簡單,如果想使用 DWR 進行更為復雜的操作,可以參考這篇博文

3.1 創建函式

首先進入 FunctionGraph 服務,創建一個修改檔案名和元資料的 Serverless 函式,記得切換下 region,選擇目標 OBS 桶所在 Region,

函式內容為

# -*- coding:utf-8 -*-
from urllib.parse import unquote_plus
from obs import ObsClient, SetObjectMetadataHeader
def handler(event, context):
 # 獲取桶名與物件名
 region_id, bucket_name, object_name = get_obs_obj_info(event.get("Records", None)[0])
 context.getLogger().info(f"bucket name: {bucket_name}, object key: {object_name}")
 ak = context.getAccessKey()
 sk = context.getSecretKey()
    server = 'obs.' + region_id + '.myhuaweicloud.com'
 obs_client = ObsClient(access_key_id=ak, secret_access_key=sk, server=server)
 # 獲取物件
 object_content = obs_client.getObject(bucket_name, object_name, loadStreamInMemory=False)
 # 去掉 .gz 后綴
 new_object_name = object_name[:-3]
 # 重新上傳
    resp = obs_client.putObject(bucket_name, new_object_name, content=object_content.body.response)
 # 設定元資料
    headers = SetObjectMetadataHeader(contentEncoding="gzip")
 obs_client.setObjectMetadata(bucket_name, new_object_name, headers=headers)
 context.getLogger().info("Upload Success")
 return
def get_obs_obj_info(record):
 if 's3' in record:
        s3 = record['s3']
 return record["eventRegion"], s3['bucket']['name'], unquote_plus(s3['object']['key'])
 else:
 obs_info = record['obs']
 return record["eventRegion"], obs_info['bucket']['name'], \
 unquote_plus(obs_info['object']['key'])

添加 OBS SDK 依賴包

3.2 創建作業流

進入DWR 服務控制臺,點擊創建作業流

在左側算子目錄找到自定義,拖到中間添加連接線并在右側選擇函式,點擊保存

保存后會進入到作業流管理,點擊創建觸發器

桶名選擇靜態網站托管的桶,事件源型別為 ObjectCreated,即任何上傳行為均會觸發,后綴填寫 .gz,即只有壓縮型別的檔案才會觸發,

3.3 上傳檔案

重新在 Vue 專案根目錄運行 npm run build 打包專案,這次不需要再去手動改后綴了,直接把打包后結果整個拖入到上傳框點擊上傳

4. 驗證已開啟 Gzip 壓縮

配置完成后,再次訪問靜態網站地址,發現已經成功,分析請求回應內容也都是壓縮后的

 

點擊關注,第一時間了解華為云新鮮技術~

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/539000.html

標籤:其他

上一篇:Git 的使用

下一篇:Readme Driven Development

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more