vue.config.js打包優(yōu)化

//一些代碼壓縮 圖片壓縮就不過多解釋了 上車

```

/*cnpm?install?image-webpack-loader?--save-dev

cnpm?install??compression-webpack-plugin?--save-dev

cnpm?install??uglifyjs-webpack-plugin?--save-dev??*/

const?path?=?require('path');

//?gzip壓縮

const?CompressionPlugin?=?require('compression-webpack-plugin')

//監(jiān)控日志

const?SentryCliPlugin?=?require('@sentry/webpack-plugin');

//?代碼壓縮

const?UglifyJsPlugin?=?require('uglifyjs-webpack-plugin')

const?Version?=?new?Date().getTime();

function?resolve(dir)?{

??return?path.join(__dirname,?dir)

}

const?cdn?=?{

??js:?[

????//?vue必須在第一個(gè)

????'https://cdn.bootcss.com/vue/2.6.10/vue.min.js',

????'https://cdn.bootcss.com/vuex/3.1.0/vuex.min.js',

????'https://cdn.bootcss.com/vue-router/3.0.6/vue-router.min.js',

????'https://cdn.bootcss.com/axios/0.18.1/axios.min.js',

????'https://cdn.bootcss.com/qs/6.5.1/qs.min.js',

????'https://cdn.jsdelivr.net/npm/vant@2.5.4/lib/vant.min.js'

??]

}

module.exports?=?{

??//部署應(yīng)用包時(shí)的基本?URL

??publicPath:?'./',

??//當(dāng)運(yùn)行?vue-cli-service?build?時(shí)生成的生產(chǎn)環(huán)境構(gòu)建文件的目錄

??outputDir:?'wx_vue',

??//放置生成的靜態(tài)資源?(js息罗、css、img揽思、fonts)?的?(相對于?outputDir?的)?目錄

??assetsDir:?'./'?+?Version?+?'/assets',

??//?eslint-loader?是否在保存的時(shí)候檢查?安裝@vue/cli-plugin-eslint有效

??lintOnSave:?false,

??//是否使用包含運(yùn)行時(shí)編譯器的?Vue?構(gòu)建版本帆竹。設(shè)置true后你就可以在使用template

??runtimeCompiler:?true,

??//?生產(chǎn)環(huán)境是否生成?sourceMap?文件?sourceMap的詳解請看末尾??

??productionSourceMap:?false,

??/**?去掉hash?*/

??filenameHashing:?true,

??//?pages:?{

??//???index:?{

??//????entry:?'src/main.js',

??//?????template:?'public/index.html',

??//?????filename:?'index.html'

??//???}

??//?},

??configureWebpack:?config?=>?{

????if?(process.env.NODE_ENV?===?'production')?{

??????//?為生產(chǎn)環(huán)境修改配置...

??????config.mode?=?'production'

??????config.devtool?=?"source-map";

????}?else?{

??????//?為開發(fā)環(huán)境修改配置...

??????config.mode?=?'development'

????}

????/**?刪除懶加載模塊的?prefetch?preload柄错,降低帶寬壓力(使用在移動(dòng)端)?*/

????config.plugins.delete("prefetch").delete("preload")

????config.optimization.minimize(true)

????//?gzip壓縮

????//????????config.plugin("compressionPlugin").use(CompressionPlugin).tap(()?=>?[

????//????????{

????//??????????filename:?'[path].gz[query]',

????//??????????algorithm:?'gzip',

????//??????????test:?/\.js$|\.html$|\.css/,?//匹配文件名

????//??????????threshold:?10240,?//超過10k進(jìn)行壓縮

????//??????????minRatio:?0.8,?//?只有壓縮率小于這個(gè)值的資源才會被處理

????//??????????deleteOriginalAssets:?false?//是否刪除源文件

????//????????}

????//??????])

????config.plugins.push(

??????new?CompressionPlugin({

????????filename:?'[path].gz[query]',

????????algorithm:?'gzip',

????????test:?/\.js$|\.html$|\.css/,

????????threshold:?10240,?//?只有大小大于該值的資源會被處理?10240

????????minRatio:?0.8,?//?只有壓縮率小于這個(gè)值的資源才會被處理

????????deleteOriginalAssets:?false?//?刪除原文件

??????})

????)

????//?公共代碼抽離

????config.optimization?=?{

??????splitChunks:?{

????????cacheGroups:?{

??????????vendor:?{

????????????chunks:?'all',

????????????test:?/node_modules/,

????????????name:?'vendor',

????????????minChunks:?1,

????????????maxInitialRequests:?5,

????????????minSize:?0,

????????????priority:?100

??????????},

??????????common:?{

????????????chunks:?'all',

????????????test:?/[\\/]src[\\/]js[\\/]/,

????????????name:?'common',

????????????minChunks:?2,

????????????maxInitialRequests:?5,

????????????minSize:?0,

????????????priority:?60

??????????},

??????????styles:?{

????????????name:?'styles',

????????????test:?/\.(sa|sc|c)ss$/,

????????????chunks:?'all',

????????????enforce:?true

??????????},

??????????runtimeChunk:?{

????????????name:?'manifest'

??????????}

????????}

??????}

????}

??},

??configureWebpack:?{

????resolve:?{

??????alias:?{

????????'vue$':?'vue/dist/vue.esm.js',

????????'@':?resolve('src'),

????????'@c':?path.resolve(__dirname,?'./src/components'),

????????'assets':?path.resolve(__dirname,?'../src/assets')

??????}

????},

????externals:?{

??????'vue':?'Vue',

??????'vuex':?'Vuex',

??????'vue-router':?'VueRouter',

??????'axios':?'axios',

??????'qs':?'Qs',

??????'vant':?'Vant'

??????//????????'weixin-js-sdk':'weixin-js-sdk',

??????//????????'clipboard':'clipboard',

??????//????????'qrcodejs2':'qrcodejs2',

??????//????????'js-md5':'js-md5'

????},

????optimization:?{

??????minimizer:?[

????????new?UglifyJsPlugin({

??????????uglifyOptions:?{

????????????output:?{?//?刪除注釋

??????????????comments:?false

????????????},

????????????//生產(chǎn)環(huán)境自動(dòng)刪除console

????????????compress:?{

??????????????//warnings:?false,?//?若打包錯(cuò)誤,則注釋這行

??????????????drop_debugger:?true,??//清除?debugger?語句

??????????????drop_console:?true,???//清除console語句

??????????????pure_funcs:?['console.log']

????????????}

??????????},

??????????sourceMap:?false,

??????????parallel:?true

????????})

??????]

????}

??},

??//?css相關(guān)配置

??css:?{

????extract:?false,

????loaderOptions:?{

??????stylus:?{

????????'resolve?url':?true,

????????'import':?[]

??????},

??????//??????less:?{

??????//??????//?`globalVars`?定義全局對象,可加入全局變量

??????//????????globalVars:?{

??????//????????????primary:?'#333'

??????//??????????}

??????//????????}

????},

????requireModuleExtension:?true,

??},

??//?webpack-dev-server?相關(guān)配置

??devServer:?{?//?設(shè)置代理

????hot:?true,?//熱加載

????host:?'localhost',?//ip地址

????port:?8085,?//端口

????https:?false,?//false關(guān)閉https刹帕,true為開啟

????open:?true,?//自動(dòng)打開瀏覽器

????proxy:?{???//配置多個(gè)跨域

??????'/api':?{?//本地?

????????target:?'http://172.168.10.155/ysol_wx',

????????//target:?'http://yishanonline.cn/ysol_wx',

????????//target:?'https://yishanol.cn/ysol_wx',

????????ws:?true,

????????changeOrigin:?true,

????????pathRewrite:?{

??????????'^/api':?''

????????}

??????}

????}

??},

??pluginOptions:?{?//?第三方插件配置

????//?...

??},

??chainWebpack:?config?=>?{

????//?============壓縮圖片?start============

????config.module

??????.rule('images')

??????.use('image-webpack-loader')

??????.loader('image-webpack-loader')

??????.options({

????????//{?bypassOnDebug:?true?}

????????mozjpeg:?{?progressive:?true,?quality:?65?},?////?Compress?JPEG?images

????????optipng:?{?enabled:?false?},????//?Compress?PNG?images

????????pngquant:?{?quality:?[0.65,?0.9],?speed:?4?},???//?Compress?PNG?images

????????gifsicle:?{?interlaced:?false?},????//?Compress?SVG?images

????????//??????????webp:?{?quality:?75?}

??????})

??????.end()

????//????????config.module.rules.push({

????//??????????test:?/\.(png|jpe?g|gif|svg)(\?.*)?$/,

????//??????????use:[{

????//??????????????loader:?'image-webpack-loader',

????//??????????????options:?{bypassOnDebug:?true}

????//??????????}]

????//????????})

????//?============壓縮圖片?end============

????config.plugin('html').tap(args?=>?{

??????args[0].cdn?=?cdn

??????return?args

????})

????//?優(yōu)化moment?去掉國際化內(nèi)容

????//?config.plugin('ignore')

????//???//?忽略/moment/locale下的所有文件

????//???.use(new?webpack.IgnorePlugin(/^\.\/locale$/,?/moment$/))

????/*?添加分析工具*/

????if?(process.env.NODE_ENV?===?'production')?{

??????if?(process.env.npm_config_report)?{

????????config

??????????.plugin('webpack-bundle-analyzer')

??????????.use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)

??????????.end();

????????config.plugins.delete('prefetch')

??????}

????}

????if?(process.env.UMI_ENV?===?'production')?{//當(dāng)為prod時(shí)候才進(jìn)行sourcemap的上傳牡属,如果不判斷票堵,在項(xiàng)目運(yùn)行的打包也會上傳

??????config.plugin("sentry").use(SentryCliPlugin,?[{

????????ignore:?['node_modules'],

????????include:?/\.map$/,?//上傳dist文件的js

????????configFile:?'sentry.properties',?//配置文件地址,這個(gè)一定要有逮栅,踩坑在這里悴势,忘了寫導(dǎo)致一直無法實(shí)現(xiàn)上傳sourcemap

????????release:?'release@0.0.1',?//版本號窗宇,自己定義的變量,整個(gè)版本號在項(xiàng)目里面一定要對應(yīng)

????????deleteAfterCompile:?true,

????????urlPrefix:?'~/wx_vue/'?//cdn?js的代碼路徑前綴

??????}])

????}

??}

}

```

未優(yōu)化之前的


優(yōu)化之后的

優(yōu)化這條路很長遠(yuǎn)特纤,愿與諸君努力,大家有什么不明白的歡迎評論及私聊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末军俊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捧存,更是在濱河造成了極大的恐慌粪躬,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矗蕊,死亡現(xiàn)場離奇詭異短蜕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)傻咖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進(jìn)店門朋魔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卿操,你說我怎么就攤上這事警检。” “怎么了害淤?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵扇雕,是天一觀的道長。 經(jīng)常有香客問我窥摄,道長镶奉,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任崭放,我火速辦了婚禮哨苛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘币砂。我一直安慰自己建峭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布决摧。 她就那樣靜靜地躺著亿蒸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掌桩。 梳的紋絲不亂的頭發(fā)上边锁,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機(jī)與錄音拘鞋,去河邊找鬼砚蓬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盆色,可吹牛的內(nèi)容都是我干的灰蛙。 我是一名探鬼主播祟剔,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摩梧!你這毒婦竟也來了物延?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤仅父,失蹤者是張志新(化名)和其女友劉穎叛薯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笙纤,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡耗溜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了省容。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抖拴。...
    茶點(diǎn)故事閱讀 40,615評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖腥椒,靈堂內(nèi)的尸體忽然破棺而出阿宅,到底是詐尸還是另有隱情,我是刑警寧澤笼蛛,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布洒放,位于F島的核電站,受9級特大地震影響滨砍,放射性物質(zhì)發(fā)生泄漏往湿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一惋戏、第九天 我趴在偏房一處隱蔽的房頂上張望煌茴。 院中可真熱鬧,春花似錦日川、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至散罕,卻和暖如春分歇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背欧漱。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工职抡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人误甚。 一個(gè)月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓缚甩,卻偏偏與公主長得像谱净,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子擅威,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評論 2 359