導航:首頁 > 源碼編譯 > vue編譯靜態cdn

vue編譯靜態cdn

發布時間:2023-01-15 19:05:40

『壹』 vue3+element-plus配置cdn

最近在做一個項目,項目配置版本如下:

下面分享一下,如上配置的 vue3 項目,如何配置 cdn 加速

介紹下常見的免費 cdn 網站

BootCDN 和 Staticfile CDN 簡單明了的搜索方式就不說了,這里講一下 UNPKG 搜索 cdn 資源的方式。

cdn 文件路徑格式: https://unpkg.com/:package@:version/:file

路徑解析如下圖:

直接使用資源名後面加 / ,可以查看文件夾目錄,比如: https://unpkg.com/browse/[email protected]/ ,復制進瀏覽器地址欄,可看見如下目錄:

按如下配置,操作方式基本一樣,文件的 cdn 版本自行替換。

vue.config.js

index.html

在 head 標簽里加上如下:

在 body 標簽里加上如下:

main.ts

確實配了 cdn 後打包文件小了很多,不過如果 cdn 掛了,你的項目也就掛了。

如果看了覺得有幫助的,我是@ 鵬多多11997110103 ,歡迎 點贊 關注 評論;
END

往期文章

個人主頁

『貳』 Vue CDN引入依賴包

本文將以ant-design-vue為實驗對象,因為CDN引入ant-design-vue前提需要CDN引入Vue,所以項目保持CDN引入Vue

build後文件

查看資源載入及性能

build後文件,對比npm, chunk-vendors.js小了這么多

查看js資源載入和性能
CDN的buildjs包小了,但需要載入引入的js
單從載入時間上來看,還是有一定的優勢

CDN引入ant-design-vue後,不能通過/deep/需改樣式
需要使用外部.less樣式覆蓋

『叄』 VuePress-Vue驅動的靜態網站生成器入門教程

VuePress 由兩部分組成:第一部分是一個極簡靜態網站生成器 (opens new window),它包含由 Vue 驅動的主題系統和插件 API,另一個部分是為書寫技術文檔而優化的默認主題,它的誕生初衷是為了支持 Vue 及其子項目的文檔需求。

每一個由 VuePress 生成的頁面都帶有預渲染好的 HTML,也因此具有非常好的載入性能和搜索引擎優化(SEO)。同時,一旦頁面被載入,Vue 將接管這些靜態內容,並將其轉換成一個完整的單頁應用(SPA),其他的頁面則會只在用戶瀏覽到的時候才按需載入。

事實上,一個 VuePress 網站是一個由 Vue、Vue Router和 webpack驅動的單頁應用。如果你以前使用過 Vue 的話,當你在開發一個自定義主題的時候,你會感受到非常熟悉的開發體驗,你甚至可以使用 Vue DevTools 去調試你的自定義主題。

在構建時,我們會為應用創建一個服務端渲染(SSR)的版本,然後通過虛擬訪問每一條路徑來渲染對應的HTML。這種做法的靈感來源於 Nuxt (opens new window)的 nuxt generate 命令,以及其他的一些項目,比如 Gatsby

1、創建並進入一個新目錄

2、使用你喜歡的包管理器進行初始化

3、將 VuePress 安裝為本地依賴

我們已經不再推薦全局安裝 VuePress

4、創建你的第一篇文檔

5、在 package.json 中添加一些 scripts

這一步驟是可選的,但我們推薦你完成它。在下文中,我們會默認這些 scripts 已經被添加。

6、在本地啟動伺服器

VuePress 會在 http://localhost:8080 (opens new window)啟動一個熱重載的開發伺服器。

現在,你應該已經有了一個簡單可用的 VuePress 文檔。接下來,了解一下推薦的 目錄結構 和 VuePress 中的 基本配置。

VuePress 遵循 「約定優於配置」 的原則,推薦的目錄結構如下:

如果沒有任何配置,這個網站將會是非常局限的,用戶也無法在你的網站上自由導航。為了更好地自定義你的網站,讓我們首先在你的文檔目錄下創建一個 .vuepress 目錄,所有 VuePress 相關的文件都將會被放在這里。你的項目結構可能是這樣:

一個 VuePress 網站必要的配置文件是 .vuepress/config.js,它應該導出一個 JavaScript 對象:

對於上述的配置,如果你運行起 dev server,你應該能看到一個頁面,它包含一個頁頭,裡麵包含一個標題和一個搜索框。VuePress 內置了基於 headers 的搜索 —— 它會自動為所有頁面的標題、h2 和 h3 構建起一個簡單的搜索索引。

你也可以使用 YAML (.vuepress/config.yml) 或是 TOML (.vuepress/config.toml) 格式的配置文件。

一個 VuePress 主題應該負責整個網站的布局和交互細節。在 VuePress 中,目前自帶了一個默認的主題(正是你現在所看到的),它是為技術文檔而設計的。同時,默認主題提供了一些選項,讓你可以去自定義導航欄(navbar)、 側邊欄(sidebar)和 首頁(homepage) 等,

由於 VuePress 是一個標準的 Vue 應用,你可以通過創建一個 .vuepress/enhanceApp.js 文件來做一些應用級別的配置,當該文件存在的時候,會被導入到應用內部。enhanceApp.js 應該 export default 一個鉤子函數,並接受一個包含了一些應用級別屬性的對象作為參數。你可以使用這個鉤子來安裝一些附加的 Vue 插件、注冊全局組件,或者增加額外的路由鉤子等:

覺得效果不錯的請幫忙加個關注點個贊,經常分享前端實用開發技巧

『肆』 Vue如何在組件內部使用CDN

引入jQuery
通過npm安裝依賴引入
1、安裝
```
npm install jquery -S
```1234
2、修改webpack配置文件
build/webpack.base.conf.js
...var webpack = require("webpack") // 1. 確保引入 webpack,後面會用到
mole.exports = { ...
resolve: {
extensions: ['.js', '.vue', '.json'],
moles: [
resolve('src'),
resolve('node_moles')
],
alias: { 'vue$': 'vue/dist/vue.common.js', 'src': resolve('src'), 'assets': resolve('src/assets'), 'components': resolve('src/components'),
// 2. 定義別名和插件位置 'jquery': 'jquery'
}
},
plugins: [
// 3. 配置全局使用 jquery
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
jquery: "jquery", "window.jQuery": "jquery"
})
]
}
手動載入
手動下載jquery 放在static 目錄下,如:static/js/jquery.min.js
和npm不同的只是在第二步定義別名和插件位置:
alias: { 'vue$': 'vue/dist/vue.common.js', 'src': resolve('src'), 'assets': resolve('src/assets'), 'components': resolve('src/components'), // 2. 定義別名和插件位置
"jquery": path.resolve(__dirname, '../static/js/jquery.min.js')
}12345678
引入jquery第三方插件
可以通過npm安裝的插件
這種引入第三方插件的方法和上一節種引入echarts的方法是一樣的
手動引入

『伍』 Vue項目優化-通過externals載入外部CDN資源

  繼續記錄學習過程。
  在查看打包報告時,通過VueCli的可視化UI面板運行build查看報告,發現還是有文件體積較大,這樣的大文件可能會造成長時間請求,等待時間過長。

b.刪除相應的improt,我這里只刪除 main-prod.js 中的類似的內容

c.在public目錄下的index.html文件頭部,添加CDN資源引用:

當然還有這些

  做完這些,重新build,發現大文件小了很多,效果立竿見影,但是發現依賴項中elemnt-ui也是一個大文件,雖然我們在開發的過程中,Element-ui的內容是按需引入,盡可能減少了打包的體積,但是那些被需要的組件,任然占據了很大的體積,此時,我們也需要通過CDN的形式來載入,這樣能夠進一步減小打包後的體積。過程還是原來的配方,再走一遍流程:a.在 main-prod.js中,注釋掉element-ui按需載入的內容;
b.在index.html的頭部區域中,通過CDN載入element-ui的js和css樣式
<link rel="stylesheet" href="https://cdn.staticfile.org/element-ui/2.8.2/theme-chalk/index.css" /> <script src="https://cdn.staticfile.org/element-ui/2.8.2/index.js"></script>
重新執行build,查看結果:

『陸』 webpack使用HtmlWebpackPlugin進行cdn配置

在前面的 文章 中我們介紹了cdn的實現原理,現在我們來實現如何在正式開發中使用cdn功能。要使用cdn功能,就需要cdn服務商,我們可以自己搭建,也可以使用一些比較知名的服務商,慶幸的是市面上有不少的免費cdn服務商,如:

其中BootCDN 是 Bootstrap 中文網 支持並維護的前端開源項目免費 CDN 服務,項目資源同步於 cdnjs 倉庫。界面相對比較好看,且支持搜索功能,可以在線測試cdn是否正常,所以下面以 Bootcdn 為例說明。

在前段項目開發中,我們經常使用webpack進行項目搭建, 主要作用有兩個,分別是

在webpack中使用cdn是在打包生成靜態資源的時候做處理,主要原理是使用 html-webpack-plugin 動態插入cdn鏈接。

關於webpack的使用這里不做過多的介紹,將以vue--cli 2.x生成的默認項目為例做介紹

html-webpack-plugin 是webpack的一個插件,可以動態的創建和編輯html內容,在html中使用 esj語法 可以讀取到配置中的參數,簡化了html文件的構建。

我們這次主要是使用它來動態插入cdn鏈接,如link標簽和script標簽。

在線項目地址

vue-cli 2.x

創建名為 webpack-cdn-demo ,類型為webpack的 vue 項目,如果安裝的vue-cli是3.x版本,命令不太一樣,詳細可看 vue-cli 3 。

安裝依賴

啟動項目

下面簡單介紹一下目錄結構

其中build文件夾中的 webpack.prod.conf.js 是我們主要注意的文件,我們在該文件中動態設置不需要被打包的模塊並構建出合適的鏈接。

在webpack項目中,所引入的第三方資源會被統一打包進vender文件中,我們通過webpack的 externals 屬性可以設置打包時排除該模塊,詳情說明見 外部擴展(externals) 。

在前面的步驟中,我們創建的項目包括vue、vue-router,在正式開發在還會有ui庫,如element-ui,為了方便演示,我們再安裝element-ui和axios兩個模塊,並實現在構建是把這是個模塊以cdn的形式引入。

注意安裝時記得 -S ,它的作用是安裝完後在 package.json 項目文件中插入記錄,後續操作需要讀取已安裝模塊

對於cdn,我們可以自己搭建,也可以使用專業的cdn服務商,這里使用免費的cdn bootcdn 。選用免費cdn有很多好處,但畢竟有隱患,那就是服務有可能會奔潰。

依次搜索出前面模塊,結果如下

按照規律,得出cdn資源路徑規則為

其他cdn服務商同理

使用cdn其實也就是在webpack熱啟動和打包項目的時候動態插入script和style鏈接 ,為了方便維護,我們通過在 build/utils.js 文件上添加幾個方法,將來在 webpack.dev.conf.js 和 webpack.prod.conf.js 上可以使用。

如果沒有build/utils.js,可以在其他文件上添加,只要在後續步驟中能操作到就行

name 模塊名稱,與package.json同名
scope 模塊作用域命名
js js地址
css css地址

這里特別注意scope,它是webpack配置的external參數下的信息,比如vue的作用域命名是Vue,vue-router的作用域命名是VueRouter,element-ui的作用域命名是ELEMENT,同理,jq的作用域命名是JQuery, 具體做法是先引入該資源,然後在控制台依次輸入近似的值,一個個匹配 (目前沒找到更好的做法)。

在webpack熱啟動本地調試的時候,我們可以使用cdn。

在 build/webpack.dev.conf.js 中,默認已經引入了 utils.js ,所以可以直接調用相關方法,如果是自定義的文件,記得引入。

我們可以往裡面添加點自定義屬性,方便在index.html中調用。 ,修改如下:

其中 cdnConfig 和 onlyCss 自定義屬性,在html上通過 htmlWebpackPlugin.options 可以讀取到。

更多html-webpack-plugin配置情況官網,這里暫時不需要更多。

在打包的時候,我們使用cdn,配置和前面dev的差不多,只不過需要做多一步。

注意此處的 externalMoles ,後面用到,也就是比dev多的步驟。

加入和dev一樣的兩個配置,不過需要把onlyCss改為 true ,因為我們希望打包時不單單使用css。

webpack配置已經完成,在html-webpack-plugin中已經添加了相關參數,我們再在頁面上可以直接使用,使用語法是 ejs ,和asp.net,jsp,php類似。

通過 <% %> 和 htmlWebpackPlugin.options 用js遍歷 插入 link標簽和script標簽。

ps: 修改了webpack配置,需要重啟項目才會生效

打包項目

可以看到打包體積大大減小了

頁面上也正確引入了cdn資源。

最後奉上git地址: https://gitee.com/zhkumsg/webpack-cdn-demo

比悲傷更悲傷的分割線

原來兩年前已經有人做了一個類型的webpack-cdn-plugin

『柒』 vu靜態資源打包放到cdn

1、vue.config.js中

mole.exports = {

 // 基本路徑

  publicPath: cdn地址,

  // 輸出文件目錄

  outputDir: "dist",

}

2、router/index.js中

const router = new VueRouter({

  // base: process.env.BASE_URL,//去除base防止window.open()打開的頁面中被拼接base導致404

  routes: constantRoutes,

});

閱讀全文

與vue編譯靜態cdn相關的資料

熱點內容
用圖片做文件夾圖標 瀏覽:687
java正則表達式語法 瀏覽:863
美圖秀在線壓縮圖片 瀏覽:184
蘋果自帶控制app是什麼 瀏覽:906
孩子學編程怎麼樣 瀏覽:588
網路編程經典書籍 瀏覽:612
曲靖創建網站java程序員 瀏覽:690
256位加密中是什麼意思 瀏覽:97
php多維數組去重 瀏覽:308
做程序員這一行儲備人才怎麼看 瀏覽:460
參加密逃文 瀏覽:327
蘋果編程語言ios 瀏覽:763
求解病態系統常用的演算法 瀏覽:993
駕校用的app叫什麼 瀏覽:219
數控編程線的纏繞方法 瀏覽:972
安卓線性布局怎麼設計計算器布局 瀏覽:24
拓本pdf 瀏覽:79
2017法碩指南pdf 瀏覽:295
linuxphp命令參數 瀏覽:425
可靠性預測和推薦演算法 瀏覽:855