webpack優(yōu)化 - code split

常見的 webpack code split 方法有三種。


多入口配置
entry: {
    login: "./src/login.js",
    app: "./src/main.js",
    ...
}

在項目開發(fā)的時候,最開始我們可能不知道會有幾個入口,每次增加一個入口都要去配置文件設置,這樣會比較麻煩,于是我們可以使用glob庫來動態(tài)獲取入口文件。

// utils.js
var glop = require('glop');

exports.getEntry = function(globPath) {
    var dirname, name;
    return glob.sync(globPath).reduce((acc, entry) => {
        dirname = path.dirname(entry);
        name = dirname.slice(dirname.lastIndexOf('/') + 1);
        acc[name] = entry;
        return acc;
    }, {})
}


// webpack.base.js
entry: utils.getEntry('./src/views/*/index.js')

使用 plugins 配置進行分割
new webpack.optimize.CommonsChunkPlugin({
    name: 'commons'
})
  • webpack 在4.0版本開始對防重復方式進行了改寫,通過配置optimization。詳細參數(shù)
optimization: {
    splitChunks: {
        chunks: 'all'
    }
}

optimization 可以看做是對 CommonsChunkPlugin 進行的一次優(yōu)化。
在舊版關系圖中存在著一些缺陷,在各個模塊打包的過程中,每個模塊之間是通過父子關系來關聯(lián)的,最后再將所有模塊都串聯(lián)起來,當父子級文件都包含同一個模塊的時候,該模塊在父級已經(jīng)成功加載完成,在子級文件沒必要再去加載了,此時應該把該模塊從文件中移除。
在新版關系圖中引入了一個ChunkGroup概念,在入口點或異步拆分點會引用這個文件分組,該分組內的文件全部都是并行加載的,且一個文件可以被多個文件復用。


動態(tài)導入
  • 使用 import 語法
import(/* webpackChunkName: "home" */ "url文件路徑").then((text)=> {
    // do something
})

可以通過注釋來設置文件名。

  • 使用 require 語法
require.ensure(["url文件路徑"], function () {
    // do something
}, 'btn2')
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 前言 開發(fā)多頁應用的時候,如果不對webpack打包進行優(yōu)化,當某個模塊被多個入口模塊引用時,它就會被打包多次(在...
    champyin閱讀 516評論 1 0
  • 前言: 我最近需要整理一下 webpack 這個前端構建工具的相關知識,希望對前端工程化的和模塊化有更多的理解,我...
    Joah_l閱讀 6,419評論 0 9
  • webpack4中的新特性 webpack3官方發(fā)布的時候,提到了下個版本可能的改動點,翻譯過來如下所示: 高性能...
    little_short閱讀 1,373評論 0 2
  • 模塊打包器:開發(fā)一個項目,業(yè)務邏輯會很多,開發(fā)會按照功能邏輯拆分成一個個的模塊,這樣開發(fā)的時候更加有條理,維護起來...
    谷子多閱讀 4,454評論 0 44
  • 又到了訓練營交作業(yè)的時間了,上一期跟頭把式的跟過來了,還像模像樣的參加了訓練營的座談會。 今天是第八期...
    秋水伊人心閱讀 367評論 0 0

友情鏈接更多精彩內容