vue.config.js文件重寫打包工具配置信息
重寫 Webpack 的配置信息
// cnpm install compression-webpack-plugin@6.1.1 -D gzip壓縮插件,需要引入
// cnpm i image-webpack-loader@8.1.0 --save-dev 圖片壓縮,不需要引入
// npm i webpack-bundle-analyzer@4.7.0 --save-dev 打包分析插件
// npm i speed-measure-webpack-plugin -D 打包時(shí)間
// npm i hard-source-webpack-plugin -D 構(gòu)建時(shí)進(jìn)行緩存
const CompressionWebpackPlugin = require('compression-webpack-plugin') // 開啟gzip壓縮, 按需引用
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin // 引入打包分析插件
const SpeedMeasurePlugin = require('speed-measure-webpack-plugin')
const HardSourceWebpackPlugin = require('hard-source-webpack-plugin')
const webpack = require('webpack')
const productionGzipExtensions = /\.(js|css|json|txt|html|ico|svg)(\?.*)?$/i // 開啟gzip壓縮, 按需寫入
const isProduction = process.env.NODE_ENV === 'production'
const BASE_URL = process.env.NODE_ENV === 'production' ? './' : './'
const path = require('path')
function resolve (dir) {
return path.join(__dirname, dir)
}
module.exports = {
// 其他配置可以走默認(rèn)
publicPath: BASE_URL, // 基本路徑
outputDir: 'dist', // 輸出文件目錄
lintOnSave: process.env.NODE_ENV !== 'production', // 生產(chǎn)環(huán)境不進(jìn)行eslint校驗(yàn)
productionSourceMap: false, // 生產(chǎn)環(huán)境是否生成 sourceMap 文件
// assetsDir: '', // 靜態(tài)文件要不要放在一個(gè)文件夾里,默認(rèn)值是‘',有需要可以自己改
// webpack配置
chainWebpack: config => {
// 移除 preload(預(yù)載) 插件
config.plugins.delete('preload')
// 移除 prefetch(預(yù)取) 插件
config.plugins.delete('prefetch')
if (isProduction) {
// 生產(chǎn)環(huán)境下---壓縮圖片
config.module
.rule('images')
.use('image-webpack-loader')
.loader('image-webpack-loader')
.options({ bypassOnDebug: true })
.end()
}
},
configureWebpack: (config) => {
// 生產(chǎn)和開發(fā)環(huán)境都有的配置
config.devtool = 'source-map'
// 開啟緩存
config.plugins.push(
new HardSourceWebpackPlugin()
)
// 配置別名
Object.assign(config.resolve, {
alias: {
'@': path.resolve(__dirname, './src')
}
})
// 生產(chǎn)環(huán)境下的配置
if (isProduction) {
// 添加webpack插件
config.plugins.push(
new SpeedMeasurePlugin(), // 構(gòu)建時(shí)間
new BundleAnalyzerPlugin() // 構(gòu)建體積
// 一些依賴,咱們也許只是用到了一部分,不必所有解析,好比moment中的語(yǔ)言包,咱們通常只用中文包就夠了,因此能夠這樣配置:
// new webpack.ContextReplacementPlugin(/moment[/\\]locale$/, /zh-cn/)
)
// 打包文件大小配置
config.performance = {
maxEntrypointSize: 10000000, // 根據(jù)入口起點(diǎn)的最大體積,控制 webpack 何時(shí)生成性能提示。
maxAssetSize: 30000000 // 根據(jù)單個(gè)資源體積(單位: bytes),控制 webpack 何時(shí)生成性能提示。
}
// 生產(chǎn)環(huán)境 優(yōu)化打包c(diǎn)hunk-vendors.js文件體積過大。
Object.assign(config.optimization, {
runtimeChunk: 'single',
splitChunks: { // 默認(rèn)的splitChunks會(huì)全部清空
chunks: 'all',
minSize: 20 * 1024 // chunks超過20000bit(20kb)將被單獨(dú)打包
// cacheGroups: { // 對(duì)node_modules下的庫(kù)單獨(dú)打包。暫時(shí)先不開啟,可以看看打包體積后決定
// vendor: { // 默認(rèn)的vendor.js
// test: /[\\/]node_modules[\\/]/, // 匹配映射文件
// name (module) {
// // get the name. E.g. node_modules/packageName/not/this/part.js
// // or node_modules/packageName
// const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]
// // npm package names are URL-safe, but some servers don't like @ symbols
// return `npm.${packageName.replace('@', '')}`
// }
// }
// }
}
})
// 清除console.log
config.optimization.minimizer[0].options.terserOptions.compress.drop_console = true
// 開啟 gzip 壓縮 文件
// 注:生成的壓縮文件以.gz為后綴,一般瀏覽器都已支持.gz的資源文件,在http請(qǐng)求的Request Headers 中能看到 Accept-Encoding:gzip。要使服務(wù)器返回.gz文件,還需要對(duì)服務(wù)器進(jìn)行配置,根據(jù)Request Headers的Accept-Encoding標(biāo)簽進(jìn)行鑒別,如果支持gzip就返回.gz文件。
// 服務(wù)器配置參考:https://blog.csdn.net/a1983029606/article/details/115690820
config.plugins.push(
new CompressionWebpackPlugin({
filename: '[path][base].gz',
algorithm: 'gzip',
test: productionGzipExtensions,
threshold: 10240, // 只有大小大于該值的資源會(huì)被處理
minRatio: 0.8 // 只有壓縮率小于這個(gè)值的資源才會(huì)被處理
})
)
}
},
// css相關(guān)配置
css: {
loaderOptions: {
// 啟用less中javascript支持
less: {
// less-lorder配置項(xiàng) 詳見 https://www.webpackjs.com/loaders/less-loader/#lessoptions
javascriptEnabled: true
}
}
},
// webpack-dev-server 相關(guān)配置
devServer: {
host: '0.0.0.0', // ip 本地
port: 2023, // 設(shè)置端口號(hào)
// inline: true, // 用于設(shè)置代碼保存時(shí)是否自動(dòng)刷新頁(yè)面。默認(rèn):true
// open: false, //配置自動(dòng)啟動(dòng)瀏覽器,默認(rèn):false
// hot: true, // 用于設(shè)置代碼保存時(shí)是否進(jìn)行熱更新(局部刷新,不刷新整個(gè)頁(yè)面)。默認(rèn):true
// https: false, // 用于設(shè)置是否啟用https,默認(rèn):false
proxy: {
// 設(shè)置代理
'/api': {
// 代理名稱 凡是使用/api開頭的地址都是用此代理
target: 'http://1.2.3.4:5000/', // 需要代理訪問的api地址
changeOrigin: true // 允許跨域請(qǐng)求
// pathRewrite: {
// // 重寫路徑,替換請(qǐng)求地址中的指定路徑
// '^/api': '/' // 將請(qǐng)求地址中的/api替換為空,也就是請(qǐng)求地址中不會(huì)包含/api/
// }
}
}
},
// 第三方插件配置
pluginOptions: {}
}重寫 Vite 的配置信息
vue.config.js 是一個(gè)可選的配置文件,可以在其中定義一些自定義的配置選項(xiàng),以覆蓋 Vite 的默認(rèn)配置。你可以在這個(gè)文件中引入 Vite 的相關(guān)模塊,然后使用 Vite 的 API 來(lái)修改或擴(kuò)展默認(rèn)配置。
以下是一個(gè)示例 vue.config.js 文件,用于重寫 Vite 的配置信息:
// vue.config.js
module.exports = {
// 在這里定義你的自定義配置
// 例如,修改默認(rèn)的構(gòu)建輸出目錄
build: {
outDir: 'dist'
}
}在上面的示例中,我們通過 module.exports 導(dǎo)出一個(gè)對(duì)象,該對(duì)象包含一個(gè) build 屬性,用于修改默認(rèn)的構(gòu)建輸出目錄。在構(gòu)建過程中,Vite 將使用這個(gè)新的輸出目錄來(lái)生成構(gòu)建結(jié)果。
要使 vue.config.js 文件生效,確保將其放置在項(xiàng)目的根目錄下,并在 Vite 的配置中引用它。例如,如果你使用的是 Vite 的 vite.config.js 配置文件,可以在其中添加以下代碼來(lái)引用 vue.config.js:
// vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import path from 'path'
// 引用 vue.config.js 文件
import { vueConfig } from './vue.config.js'
export default defineConfig({
plugins: [vue()],
// 將 vueConfig 合并到默認(rèn)配置中
...vueConfig,
resolve: {
alias: {
// 在這里添加自定義的別名配置
}
},
build: {
// 在這里添加自定義的構(gòu)建配置
},
// 在這里添加其他 Vite 配置選項(xiàng)
})在上面的示例中,我們通過將 vueConfig 對(duì)象合并到默認(rèn)配置中,將 vue.config.js 中的自定義配置應(yīng)用到整個(gè) Vite 項(xiàng)目中。你還可以根據(jù)需要添加其他的自定義配置選項(xiàng),例如別名(alias)和構(gòu)建選項(xiàng)(build options)。
到此這篇關(guān)于vue.config.js文件重寫打包工具配置信息的文章就介紹到這了,更多相關(guān)vue.config.js重寫打包配置內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript對(duì)象數(shù)組排序?qū)嵗椒\析
這篇文章主要介紹了JavaScript對(duì)象數(shù)組排序?qū)嵗椒\析的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧2016-06-06
原生js實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制內(nèi)容到剪切板
這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制內(nèi)容到剪切板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11
原生JavaScrip實(shí)現(xiàn)語(yǔ)音識(shí)別的示例詳解
語(yǔ)音識(shí)別轉(zhuǎn)文本看似是很有難度的一個(gè)功能,但你知道嗎,使用原生?JavaScript?也能實(shí)現(xiàn)語(yǔ)音識(shí)別功能,下面小編就來(lái)和大家講講具體的實(shí)現(xiàn)方法吧2025-03-03
javascript檢查某個(gè)元素在數(shù)組中的索引值
在js中提供數(shù)據(jù)查找了函數(shù)有很多,但我查找了很久都沒有能實(shí)現(xiàn)我要的方法,后來(lái)發(fā)現(xiàn)可以使用indexOf函數(shù)來(lái)實(shí)現(xiàn)查找與定位數(shù)組元素索引值的具體方法,各位朋友可參考2016-03-03
詳解基于Vue cli生成的Vue項(xiàng)目的webpack4升級(jí)
這篇文章主要介紹了詳解基于Vue cli生成的Vue項(xiàng)目的webpack4升級(jí),本文將詳細(xì)介紹從webpack3到webpack4的升級(jí)過程,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2018-06-06
uniapp中的picker選擇器的幾種使用場(chǎng)景
本文主要介紹了uniapp中的picker選擇器的幾種使用場(chǎng)景,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
JavaScript 處理樹數(shù)據(jù)結(jié)構(gòu)的方法示例
這篇文章主要介紹了JavaScript 處理樹數(shù)據(jù)結(jié)構(gòu)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧2019-06-06

