vue項目打包以及優(yōu)化的實現(xiàn)步驟
vue項目的打包上線及優(yōu)化
項目完成,我們會將項目進行上線,為了提升性能,我們往往會進行一些優(yōu)化處理
vue項目的打包
腳手架項目中有一個默認的打包命令,我們可以輸入npm run bulid來對項目進行打包
打開終端,切換到項目根目錄
輸入命令:npm run build
會在當前項目的根目錄下生成一個dist文件夾,里面就是打包后的文件
項目托管
我們可以創(chuàng)建一個簡易的node服務器來托管打包后的項目,這樣就可以模擬訪問服務器的項目
1.創(chuàng)建一個新的目錄做為服務器根目錄,小黑窗執(zhí)行node init -y執(zhí)行初始化,再執(zhí)行npm i express下載express包,然后創(chuàng)建app.js文件將下面代碼拷貝進來(利用express包開一個服務器)
2.將剛剛打包生成的dist目錄整體拷貝到node服務器目錄下
3.資源在dist目錄下,所以可以使用靜態(tài)資源托管的方式提供資源,將dist目錄做為資源托管目錄
express創(chuàng)建服務器
var express = require('express') const path = require('path') // 2. 創(chuàng)建服務器 var app = express(); // 托管靜態(tài)資源 // 也可以將所有靜態(tài)資源放置到指定的目錄下,如public,然后添加以下的配置 app.use(express.static('dist')) app.use('/', express.static(path.join(__dirname, 'dist'))) // 3. 開啟服務器并監(jiān)聽端口 app.listen(3001, () => { console.log('http://127.0.0.1:3001') })
啟動服務器
在服務器目錄下打開終端,輸入node app.js
在瀏覽器中輸入服務器地址
項目的常見優(yōu)化
項目打包之后,會將之前所使用到的部署依賴包和項目中使用到的外部資源都打包
如果之前引入的包很多,或者引入的不必需的包,那么會增大項目的體積,從而造成用戶訪問的時候需要請求更多的數(shù)據(jù)才能正常的訪問,不利于用戶體驗,所以需要對打包過程進行優(yōu)化
一般情況下我們可以從優(yōu)化代碼的方面對項目進行優(yōu)化,也可以使用類似cdn的方式對項目進行優(yōu)化
腳手架中提供了一個命令,可以讓我們看到項目的資源的分布(占用)情況:npm run build – --report
生成項目報告文件
npm run build – --report
打開報告頁面
1.報告頁面中,越大的塊說明這個模板占用的體積越大
2.占用體積越越大的模塊,我們要考慮不將其打包到產品中
cdn加速優(yōu)化
cdn: CDN的本質上是將媒體資源,動靜態(tài)圖片(Flash),HTML,CSS,JS等等內容緩存到距離你更近的IDC,從而讓用戶進行共享資源,實現(xiàn)縮減站點間的響應時間等等需求,而網游加速器的本質則是通過建立高帶寬機房,架設多節(jié)點服務器來為用戶進行加速。
我們可以將一些大體積的模塊,讓cdn幫我們提供相應的資源,這樣就可以緩解我們自己的服務器的壓力,同時提供更快更好的資源響應
vue.config.js
在腳手架項目中,如果想增加自己的項目配置,可以在根目錄下添加vue.config.js文件,在這個文件中實現(xiàn)自定義的配置
在打包的時候,這個配置會和腳手架的配置組合到一起
添加包的排除
module.exports = { configureWebpack: { externals:{ 'vue': 'Vue', 'element-ui': 'ELEMENT', 'quill': 'Quill' } }, }
可以看到,打包后的項目體積顯著的減少,但是,問題并沒有解決,由于沒有這些包,打包后的項目并不能運行
這是因為,現(xiàn)在打包的項目中,已經沒有Vue這個包了,所以才會出現(xiàn)錯誤,我們現(xiàn)在需要使用cdn的方式來提供這些資源
添加cdn的用戶自定義
vue.config.js中加入下面代碼
let cdn = { css: [ // element-ui css 'https://unpkg.com/element-ui/lib/theme-chalk/index.css',// 樣式表 // 富文本框插件樣式 'https://cdn.bootcdn.net/ajax/libs/quill/2.0.0-dev.4/quill.bubble.css' ], js: [ // vue must at first! 'https://unpkg.com/vue/dist/vue.js', // vuejs // element-ui js 'https://unpkg.com/element-ui/lib/index.js', // elementUI // 富文本框插件 'https://cdn.bootcdn.net/ajax/libs/quill/2.0.0-dev.4/quill.js' ] }
通過插件將資源自動的添加到頁面中
掛載資源到插件
module.exports = { // 添加打包排除,說明以下配置中的包將來不會打包到項目中 configureWebpack: { externals:{ 'vue': 'Vue', 'element-ui': 'ELEMENT', 'quill': 'Quill' } }, // 將cdn的資源掛載到插件上 chainWebpack (config) { config.plugin('html').tap(args => { args[0].cdn = cdn return args }) } }
在頁面中使用插件添加指定的cdn資源,在項目中的public中index中加入下面代碼(項目打包前的index文件)
添加css引入(head結構中)
<% for(var css of htmlWebpackPlugin.options.cdn.css) { %> <link rel="stylesheet" href="<%=css%>" /> <% } %>
添加js引入(body結構中)
<% for(var js of htmlWebpackPlugin.options.cdn.js) { %> <script src="<%=js%>"></script> <% } %>
重新打包,OK
設置只有產品階段才使用cdn
在項目開發(fā)的時候,其實沒有必要使用cdn,這樣反而會讓我們的頁面加載效率下降,同時也不適合本地開發(fā)(需要連網)
我們可以根據(jù)環(huán)境變量進行相應的處理,只有在產品的時候,才讓插件去自動注入相應的資源文件到html頁面
const isProd = process.env.NODE_ENV === 'production' // 是否生產環(huán)境 let externals = { 'vue': 'Vue', 'element-ui': 'ELEMENT', 'quill': 'Quill' } let cdn = { css: [ // element-ui css 'https://unpkg.com/element-ui/lib/theme-chalk/index.css',// 樣式表 // 富文本框插件樣式 'https://cdn.bootcdn.net/ajax/libs/quill/2.0.0-dev.4/quill.bubble.css' ], js: [ // vue must at first! 'https://unpkg.com/vue/dist/vue.js', // vuejs // element-ui js 'https://unpkg.com/element-ui/lib/index.js', // elementUI // 富文本框插件 'https://cdn.bootcdn.net/ajax/libs/quill/2.0.0-dev.4/quill.js' ] } cdn = isProd ? cdn : { css: [], js: [] } externals = isProd ? externals : {} module.exports = { // 添加打包排除,說明以下配置中的包將來不會打包到項目中 configureWebpack: { externals }, // chainWebpack (config) { config.plugin('html').tap(args => { args[0].cdn = cdn return args }) } }
到此這篇關于vue項目打包以及優(yōu)化的實現(xiàn)步驟的文章就介紹到這了,更多相關vue項目打包以及優(yōu)化內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
警告[vue-router]?Duplicate?named?routes?definition簡單解決方法
這篇文章主要關于介紹了警告[vue-router]?Duplicate?named?routes?definition的解決方法,這個錯誤提示是因為在Vue Router中定義了重復的路由名稱,需要的朋友可以參考下2023-12-12vue3+element 分片上傳與分片下載功能實現(xiàn)方法詳解
這篇文章主要介紹了vue3+element 分片上傳與分片下載功能實現(xiàn)方法,結合實例形式詳細分析了vue3+element 分片上傳與下載相關實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下2023-06-06