vue-cli3.0之配置productionGzip方式
vue-cli3.0配置productionGzip
最近沒(méi)事升級(jí)項(xiàng)目到vue-cli3.0, 發(fā)現(xiàn)沒(méi)有了productionGzip配置,于是查了一下資料, 解決方案如下:
提示:本文compression-webpack-plugin的版本號(hào)是2.0.0,3.0.0的話看文章內(nèi)小提示
1.安裝如下插件
npm i -D compression-webpack-plugin
2.在文件vue.config.js里導(dǎo)入compression-webpack-plugin,并添加壓縮文件類(lèi)型
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const productionGzipExtensions = ['js', 'css']3.在configureWebpack 里配置如下代碼
a.簡(jiǎn)單方式
? ?configureWebpack: {
? ? ? ? plugins: [
? ? ? ? ? ? new CompressionWebpackPlugin({
? ? ? ? ? ? ? ? asset: '[path].gz[query]', ? // 提示compression-webpack-plugin@3.0.0的話asset改為filename
? ? ? ? ? ? ? ? algorithm: 'gzip',
? ? ? ? ? ? ? ? test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
? ? ? ? ? ? ? ? threshold: 10240,
? ? ? ? ? ? ? ? minRatio: 0.8
? ? ? ? ? ? })
? ? ? ? ]
? ? },b.高級(jí)方式
? ? configureWebpack: config => {
? ? ? ? if (process.env.NODE_ENV === 'production') {
? ? ? ? ? ? // 生產(chǎn)環(huán)境
? ? ? ? ? ? config.plugins.push(
? ? ? ? ? ? ? ? new CompressionWebpackPlugin({
? ? ? ? ? ? ? ? ? ? asset: '[path].gz[query]', // 提示示compression-webpack-plugin@3.0.0的話asset改為filename
? ? ? ? ? ? ? ? ? ? algorithm: 'gzip',
? ? ? ? ? ? ? ? ? ? test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
? ? ? ? ? ? ? ? ? ? threshold: 10240,
? ? ? ? ? ? ? ? ? ? minRatio: 0.8
? ? ? ? ? ? ? ? })
? ? ? ? ? ? );
? ? ? ? } else {
? ? ? ? ? ? // 開(kāi)發(fā)環(huán)境
? ? ? ? }
? ? },?? ?// 配置參數(shù)詳解 ?? ?? ?// 提示 compression-webpack-plugin@3.0.0的話asset改為filename ?? ?asset: 目標(biāo)資源名稱(chēng)。 [file] 會(huì)被替換成原始資源。[path] 會(huì)被替換成原始資源的路徑, [query] 會(huì)被替換成查詢(xún)字符串。默認(rèn)值是 "[path].gz[query]"。 ?? ?algorithm: 可以是 function(buf, callback) 或者字符串。對(duì)于字符串來(lái)說(shuō)依照 zlib 的算法(或者 zopfli 的算法)。默認(rèn)值是 "gzip"。 ?? ?test: 所有匹配該正則的資源都會(huì)被處理。默認(rèn)值是全部資源。 ?? ?threshold: 只有大小大于該值的資源會(huì)被處理。單位是 bytes。默認(rèn)值是 0。 ?? ?minRatio: 只有壓縮率小于這個(gè)值的資源才會(huì)被處理。默認(rèn)值是 0.8。
4.然后運(yùn)行 npm run build 完成
5.附完整vue.config.js配置代碼
const path = require('path');
function resolve(dir) {
? ? return path.join(__dirname, dir)
}
// 導(dǎo)入compression-webpack-plugin
const CompressionWebpackPlugin = require('compression-webpack-plugin')
// 定義壓縮文件類(lèi)型
const productionGzipExtensions = ['js', 'css']
module.exports = {
? ? baseUrl: "/",
? ? // 輸出目錄
? ? outputDir: 'dist', ?
? ? lintOnSave: true,
? ? // 是否為生產(chǎn)環(huán)境構(gòu)建生成 source map?
? ? productionSourceMap: false,
? ? // alias 配置
? ? chainWebpack: (config) => {
? ? ? ? config.resolve.alias
? ? ? ? ? ? .set('@', resolve('src'))
? ? },
? ? // 簡(jiǎn)單的方式
? ? // configureWebpack: {
? ? // ? ? plugins: [
? ? // ? ? ? ? new CompressionWebpackPlugin({
? ? // ? ? ? ? ? ? asset: '[path].gz[query]', // 提示 compression-webpack-plugin@3.0.0的話asset改為filename
? ? // ? ? ? ? ? ? algorithm: 'gzip',
? ? // ? ? ? ? ? ? test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
? ? // ? ? ? ? ? ? threshold: 10240,
? ? // ? ? ? ? ? ? minRatio: 0.8
? ? // ? ? ? ? })
? ? // ? ? ]
? ? // },
? ? // 高級(jí)的方式
? ? configureWebpack: config => {
? ? ? ? if (process.env.NODE_ENV === 'production') {
? ? ? ? ? ? // 生產(chǎn)環(huán)境
? ? ? ? ? ? config.plugins.push(
? ? ? ? ? ? ? ? new CompressionWebpackPlugin({
? ? ? ? ? ? ? ? ? ? asset: '[path].gz[query]', ?// 提示 compression-webpack-plugin@3.0.0的話asset改為filename
? ? ? ? ? ? ? ? ? ? algorithm: 'gzip',
? ? ? ? ? ? ? ? ? ? test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
? ? ? ? ? ? ? ? ? ? threshold: 10240,
? ? ? ? ? ? ? ? ? ? minRatio: 0.8
? ? ? ? ? ? ? ? })
? ? ? ? ? ? );
? ? ? ? } else {
? ? ? ? ? ? // 開(kāi)發(fā)環(huán)境
? ? ? ? }
? ? },
? ? // CSS 相關(guān)選項(xiàng)
? ? css: {
? ? ? ? extract: true,
? ? ? ? // 是否開(kāi)啟 CSS source map?
? ? ? ? sourceMap: false,
? ? ? ? // 為預(yù)處理器的 loader 傳遞自定義選項(xiàng)。比如傳遞給
? ? ? ? // sass-loader 時(shí),使用 `{ sass: { ... } }`。
? ? ? ? loaderOptions: {}, // 為所有的 CSS 及其預(yù)處理文件開(kāi)啟 CSS Modules。
? ? ? ? modules: false
? ? },
? ? // 在多核機(jī)器下會(huì)默認(rèn)開(kāi)啟。
? ? parallel: require('os').cpus().length > 1,
? ? // PWA 插件的選項(xiàng)。 ??
? ? pwa: {},
? ? // 配置 webpack-dev-server 行為。
? ? devServer: {
? ? ? ? open: process.env.NODE_ENV === "development",
? ? ? ? host: 'localhost',
? ? ? ? port: 8888,
? ? ? ? https: true,
? ? ? ? hotOnly: false,
? ? ? ? open: true,
? ? ? ? proxy: '', // string | Object
? ? ? ? before: app => {}
? ? },
? ? // 第三方插件的選項(xiàng)
? ? pluginOptions: {}
}vue3.0配置gzip 及 資源404
第一步:vue.config.js
plugins: [
new CompressionPlugin({
test:productionGzipExtensions, //匹配文件名
threshold: 10240,//對(duì)超過(guò)10k的數(shù)據(jù)壓縮
deleteOriginalAssets: true //不刪除源文件
})
],打包效果

第二步:這里使用 nginx 進(jìn)行配置
這里遇到了 小問(wèn)題 :
deleteOriginalAssets: true //不刪除源文件 為true時(shí),頁(yè)面加載資源呈404,需要配置nginx開(kāi)啟打包靜態(tài)文件

nginx.conf
gzip on;
gzip_static on; # 開(kāi)啟靜態(tài)文件壓縮
gzip_min_length 1k; # 不壓縮臨界值,大于1K的才壓縮
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss; # #進(jìn)行壓縮的文件類(lèi)型
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_disable "MSIE [1-6]\.";開(kāi)啟Nginx gzip壓縮非常簡(jiǎn)單,達(dá)到的效果可以壓縮靜態(tài)文件大小、提高頁(yè)面訪問(wèn)速度、節(jié)省流量和帶寬是很有幫助的,也為用戶(hù)省去了很多流量;唯一的不足就是開(kāi)啟之后服務(wù)器這邊會(huì)增加運(yùn)算,進(jìn)行壓縮運(yùn)算處理,就比如壓縮級(jí)別,服務(wù)器cpu會(huì)有開(kāi)銷(xiāo)。
請(qǐng)求正常:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
一文帶你搞懂Vue中Provide/Inject的使用與高級(jí)應(yīng)用
這篇文章將詳細(xì)介紹如何在?Vue.js?中使用?provide?和?inject?模式,并探討其在實(shí)際應(yīng)用中的高級(jí)用法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
vue better scroll 無(wú)法滾動(dòng)的解決方法
better scroll可以實(shí)現(xiàn)輪播圖和頁(yè)面滾動(dòng),是移動(dòng)端滾動(dòng)插件,這篇文章主要介紹了vue better scroll 無(wú)法滾動(dòng)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
通過(guò)GASP讓vue實(shí)現(xiàn)動(dòng)態(tài)效果實(shí)例代碼詳解
GASP是一個(gè)JavaScript動(dòng)畫(huà)庫(kù),它支持快速開(kāi)發(fā)高性能的 Web 動(dòng)畫(huà)。GASP 使我們能夠輕松輕松快速的將動(dòng)畫(huà)串在一起,來(lái)創(chuàng)造一個(gè)高內(nèi)聚的流暢動(dòng)畫(huà)序列。這篇文章主要介紹了通過(guò)GASP讓vue實(shí)現(xiàn)動(dòng)態(tài)效果,需要的朋友可以參考下2019-11-11
一文搞明白vue開(kāi)發(fā)者vite多環(huán)境配置
Vue是一款流行的JavaScript框架,用于開(kāi)發(fā)動(dòng)態(tài)單頁(yè)應(yīng)用程序,本地安裝和環(huán)境配置是學(xué)習(xí)和使用Vue的第一步,下面這篇文章主要給大家介紹了關(guān)于vue開(kāi)發(fā)者vite多環(huán)境配置的相關(guān)資料,需要的朋友可以參考下2023-06-06

