webpack優(yōu)化相關(guān)

配置 resolve.modules

  1. webpack 的 resolve.modules 是用來配置模塊庫(即 node_modules)所在的位置浴栽。當(dāng) js 里出現(xiàn) import 'vue' 這樣不是相對队秩、也不是絕對路徑的寫法時(shí),它便會到 node_modules 目錄下去找。

  2. 在默認(rèn)配置下车要,webpack 會采用向上遞歸搜索的方式去尋找。但通常項(xiàng)目目錄里只有一個(gè) node_modules,且是在項(xiàng)目根目錄渗磅。為了減少搜索范圍,我們可以直接寫明 node_modules 的全路徑检访。

++build/webpack.base.conf.js++

module.exports = {

  resolve: {

    extensions: ['.js', '.vue', '.json'],

    modules: [

      resolve('src'),

       resolve('node_modules') 

    ],

    alias: {

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

      '@': resolve('src'),

    }

  },

配置裝載機(jī)的 include & exclude

  1. webpack 的裝載機(jī)(loaders)里的每個(gè)子項(xiàng)都可以有 include 和 exclude 屬性:

    • include:導(dǎo)入的文件將由加載程序轉(zhuǎn)換的路徑或文件數(shù)組(把要處理的目錄包括進(jìn)來)
    • exclude:不能滿足的條件(排除不處理的目錄)
  2. 我們可以使用 include 更精確地指定要處理的目錄始鱼,這可以減少不必要的遍歷,從而減少性能損失脆贵。

  3. 同時(shí)使用 exclude 對于已經(jīng)明確知道的医清,不需要處理的目錄,予以排除卖氨,從而進(jìn)一步提升性能会烙。

++build/webpack.base.conf.js++

module: {

  rules: [

    {

      test: /\.vue$/,

      loader: 'vue-loader',

      options: vueLoaderConfig,

      include: [resolve('src')],

      exclude: /node_modules\/(?!(autotrack|dom-utils))|vendor\.dll\.js/

    },

    {

      test: /\.js$/,

      loader: 'babel-loader',

      include: [resolve('src')],

      exclude: /node_modules/

    },

合理配置extensions擴(kuò)展名

resolve.extensions能夠自動解析確定的擴(kuò)展负懦,但是如果extensions擴(kuò)展名過多,會導(dǎo)致解析過程過多柏腻,所以我們要合理配置擴(kuò)展名纸厉,不要過多配置擴(kuò)展名,項(xiàng)目引用多的文件五嫂,擴(kuò)展名放在前面

resolve: {
  extensions: ['.vue', '.js']
}

使用 webpack-parallel-uglify-plugin 插件來壓縮代碼

  1. 默認(rèn)情況下 webpack 使用 UglifyJS 插件進(jìn)行代碼壓縮颗品,但由于其采用單線程壓縮,速度很慢贫导。

  2. 我們可以改用 webpack-parallel-uglify-plugin 插件抛猫,它可以并行運(yùn)行 UglifyJS 插件,從而更加充分孩灯、合理的使用 CPU 資源闺金,從而大大減少構(gòu)建時(shí)間。

npm i webpack-parallel-uglify-plugin -D

++build/webpack.prod.conf.js++

const ParallelUglifyPlugin = require('webpack-parallel-uglify-plugin');

//....

   // 刪掉webpack提供的UglifyJS插件

   //new UglifyJsPlugin({

   //  uglifyOptions: {

   //    compress: {

   //      warnings: false

   //    }

   //  },

   //  sourceMap: config.build.productionSourceMap,

   //  parallel: true

   //}),

   // 增加 webpack-parallel-uglify-plugin來替換

   new ParallelUglifyPlugin({

     cacheDir: '.cache/',

     uglifyJS:{

       output: {

         comments: false

       },

       compress: {

         warnings: false

       }

     }

   }),

使用 HappyPack 來加速代碼構(gòu)建

  1. 由于運(yùn)行在 Node.js 之上的 Webpack 是單線程模型的峰档,所以 Webpack 需要處理的事情只能一件一件地做败匹,不能多件事一起做。

  2. 而 HappyPack 的處理思路是:將原有的 webpack 對 loader 的執(zhí)行過程讥巡,從單一進(jìn)程的形式擴(kuò)展多進(jìn)程模式掀亩,從而加速代碼構(gòu)建。

npm i -D happypack

++webpack.base.conf.js++

module: {
 rules: [
  {
    test: /\.js$/,
    // 將對.js 文件的處理轉(zhuǎn)交給 id 為 babel 的HappyPack實(shí)例
      use:['happypack/loader?id=babel'],
      include: [resolve('src'), resolve('test'),   
        resolve('node_modules/webpack-dev-server/client')],
    // 排除第三方插件
      exclude:path.resolve(__dirname,'node_modules'),
    },
    {
      test: /\.vue$/,
      use: ['happypack/loader?id=vue'],
    },
  ]
},
const HappyPack = require('happypack');
const HappyPackThreadPool = HappyPack.ThreadPool({size:5});
plugins: [
   new HappyPack({
     // 用唯一的標(biāo)識符id欢顷,來代表當(dāng)前的HappyPack是用來處理一類特定的文件
     id:'vue',
     loaders:[
       {
         loader:'vue-loader',
         options: vueLoaderConfig
       }
     ],
     threadPool: HappyPackThreadPool,
   }),

   new HappyPack({
     // 用唯一的標(biāo)識符id槽棍,來代表當(dāng)前的HappyPack是用來處理一類特定的文件
     id:'babel',
     // 如何處理.js文件,用法和Loader配置中一樣
     loaders:['babel-loader?cacheDirectory'],
     threadPool: HappyPackThreadPool,
   }),
]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末抬驴,一起剝皮案震驚了整個(gè)濱河市炼七,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌布持,老刑警劉巖豌拙,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異题暖,居然都是意外死亡按傅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門胧卤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來唯绍,“玉大人,你說我怎么就攤上這事枝誊】雒ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵侧啼,是天一觀的道長牛柒。 經(jīng)常有香客問我堪簿,道長,這世上最難降的妖魔是什么皮壁? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任椭更,我火速辦了婚禮,結(jié)果婚禮上蛾魄,老公的妹妹穿的比我還像新娘虑瀑。我一直安慰自己,他們只是感情好滴须,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布舌狗。 她就那樣靜靜地躺著,像睡著了一般扔水。 火紅的嫁衣襯著肌膚如雪痛侍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天魔市,我揣著相機(jī)與錄音主届,去河邊找鬼。 笑死待德,一個(gè)胖子當(dāng)著我的面吹牛君丁,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播将宪,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼绘闷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了较坛?” 一聲冷哼從身側(cè)響起印蔗,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎燎潮,沒想到半個(gè)月后喻鳄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扼倘,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡确封,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了再菊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爪喘。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纠拔,靈堂內(nèi)的尸體忽然破棺而出秉剑,到底是詐尸還是另有隱情,我是刑警寧澤稠诲,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布侦鹏,位于F島的核電站诡曙,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏略水。R本人自食惡果不足惜价卤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渊涝。 院中可真熱鬧慎璧,春花似錦、人聲如沸跨释。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳖谈。三九已至岁疼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間缆娃,已是汗流浹背五续。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留龄恋,地道東北人疙驾。 一個(gè)月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像郭毕,于是被迫代替她去往敵國和親它碎。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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

  • 一显押、DLL方式DLL方式就是通過配置扳肛,告訴webpack指定庫在項(xiàng)目中的位置,從而直接引入乘碑,不將其打包在內(nèi)DLL方...
    yichen_china閱讀 3,390評論 0 1
  • 1挖息、優(yōu)化loader配置1.1 縮小文件匹配范圍(include/exclude) 通過排除node_module...
    田成力閱讀 438評論 0 0
  • 如果 Vue 項(xiàng)目比較大.或者說項(xiàng)目中引入了許多第三方庫,那么在執(zhí)行 npm run build 構(gòu)建項(xiàng)目的時(shí)候會...
    李亞_45be閱讀 1,533評論 0 0
  • 1. 現(xiàn)在整個(gè)小區(qū)的人都認(rèn)定我就是個(gè)婊子兽肤。 我被于海綁在小區(qū)樓下的路燈桿上套腹,脖子上掛了兩雙破鞋。于海特意找了一面鑼...
    小米粒666閱讀 1,685評論 18 47
  • 今天上班時(shí)領(lǐng)導(dǎo)給每個(gè)人發(fā)了一副耳塞應(yīng)付上面的安全檢查沒想到戴上后仿佛進(jìn)入另一個(gè)寂靜的世界噪音變成了蚊子的細(xì)語溫柔的...
    鴻蒙一葉閱讀 407評論 9 9