webpack打包體積優(yōu)化

基于webpack的可視化資源分析工具webpack-bundle-analyzer分析優(yōu)化項(xiàng)目資源柳畔。

安裝webpack-bundle-analyzer

控制臺(tái)輸入npm/cnpm install --save-dev webpack-bundle-analyzer

  • config/index中
build: {
  ...
  bundleAnalyzerReport: process.env.npm_config_report
}
  • webpack生產(chǎn)環(huán)境中 build/webpack.prod.conf.js文件中
if (config.build.bundleAnalyzerReport) {
  const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin
  webpackConfig.plugins.push(new BundleAnalyzerPlugin())
}

在控制臺(tái)使用npm run build --report
build成功后會(huì)自動(dòng)打開localhost:8888即可看到分析內(nèi)容


image.png
分析優(yōu)化方案:
  • lodash
    lodash是一個(gè)javascript的實(shí)用工具庫,用來處理各種數(shù)據(jù)類型。
    下面是一段項(xiàng)目中用到lodash的地方,該項(xiàng)目只用到了它的深拷貝方法宁舰。
import  _ from 'lodash';
...
// 過濾請(qǐng)求參數(shù)對(duì)象中的空屬性
const apiQueryFilter = obj => {
    let _obj = cloneDeep(obj);
    for (let key in _obj) {
        if (_obj[key] && typeof _obj[key] === 'object') {
            apiQueryFilter(_obj[key]);
        } else if (_obj[key] === undefined || _obj[key] === null || _obj[key] === '') {
            delete _obj[key];
        }
    }

    return _obj;
};

然后在打包的時(shí)候會(huì)發(fā)現(xiàn)有70多kb~刷晋。
如何做到按需加載?
引入的時(shí)候import lodash+ '/'+對(duì)應(yīng)的方法名就可以了听想。

import cloneDeep from 'lodash/cloneDeep';

這樣lodash會(huì)減少很多體積。

  • moment.js
    moment是一款javascript日期處理類庫马胧。
    因?yàn)樵擁?xiàng)目中用到的地方不多汉买,所以去掉了這個(gè)類庫。
    網(wǎng)上優(yōu)化的方案可以一試:
  1. 按需加載moment.js語言包佩脊,使用webpack contextReplacementPlugin
plugins: [
  new webpack.ContextReplacementPlugin(
    /moment[/\\]locale$/,
    /zh-cn/,
  ),

配置只是zh-cn語言包后文件體積會(huì)明顯減少蛙粘,親測(cè)有效。

  1. 使用date-fns,與moment相比威彰,更為輕量化出牧。
  • vue.js
    將項(xiàng)目中需要的一些公共依賴包,并且不常變動(dòng)的歇盼,單獨(dú)取出舔痕,不再每次都打包編譯。如vue、vue-router伯复、vuex慨代、axios用cdn中的文件代替,而不是直接打包到vendor中啸如。這樣在有緩存的情況下侍匙,這些資源均走緩存,不用加載叮雳。
    在入口html中引入js文件
<script src="https://cdn.bootcss.com/vue/2.5.2/vue.min.js"></script>

去掉js的import
配置webpack.base.conf.js的externals選項(xiàng)想暗。

module.exports = {
  context: path.resolve(__dirname, '../'),
    entry: entry,
    output: {
        path: config.build.assetsRoot,
        filename: '[name].js',
        publicPath: process.env.NODE_ENV === 'production' ?
            config.build.assetsPublicPath : config.dev.assetsPublicPath
    },
    externals:{
      vue: 'Vue',
      axios: 'Axios',    
      vue-router:'VueRouter',
      vuex:'_default'
    },
    resolve: {
        extensions: ['.js', '.vue', '.json', 'ts'],
        alias: {
            'vue$': 'vue/dist/vue.esm.js',
            '@': resolve('src'),
            '~': resolve('static'),
        }
    },
    module: {
    },
}

注意:externals中鍵名是npm install命令裝的插件名稱,鍵值是插件對(duì)外提供的那個(gè)對(duì)象帘不,需要查看源碼说莫。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市厌均,隨后出現(xiàn)的幾起案子唬滑,更是在濱河造成了極大的恐慌,老刑警劉巖棺弊,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晶密,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡模她,警方通過查閱死者的電腦和手機(jī)稻艰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來侈净,“玉大人尊勿,你說我怎么就攤上這事⌒笳欤” “怎么了元扔?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)旋膳。 經(jīng)常有香客問我澎语,道長(zhǎng),這世上最難降的妖魔是什么验懊? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任擅羞,我火速辦了婚禮,結(jié)果婚禮上义图,老公的妹妹穿的比我還像新娘减俏。我一直安慰自己,他們只是感情好碱工,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布娃承。 她就那樣靜靜地躺著奏夫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪草慧。 梳的紋絲不亂的頭發(fā)上桶蛔,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天匙头,我揣著相機(jī)與錄音漫谷,去河邊找鬼。 笑死蹂析,一個(gè)胖子當(dāng)著我的面吹牛舔示,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播电抚,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼惕稻,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了蝙叛?” 一聲冷哼從身側(cè)響起俺祠,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎借帘,沒想到半個(gè)月后蜘渣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肺然,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蔫缸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片际起。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拾碌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出街望,到底是詐尸還是另有隱情校翔,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布灾前,位于F島的核電站防症,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏豫柬。R本人自食惡果不足惜告希,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烧给。 院中可真熱鬧燕偶,春花似錦、人聲如沸础嫡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至伯诬,卻和暖如春晚唇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背盗似。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工哩陕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赫舒。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓悍及,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親接癌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子心赶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容