[TOC]
>[info] ## SplitChunksPlugin分割代碼 -- 抽取公共模塊
~~~
1.webpack 創建項目的時候我們想對代碼進行抽離打包,在4.0之前'commonsChunkPlugin',在4.0之后'splitChunksPlugins'
'splitChunksPlugins'是webpack主模塊中的一個細分模塊,無需npm引入。功能上,'splitChunksPlugins'只能用于如何抽離
公用的代碼,也就是抽離公用代碼的規則
~~~
>[danger] ##### 先舉個例子抽離vue
~~~
1.在打包的時候如果我們想把vue單獨提取出一個js 可以向下面的寫法,意思是把vue 打包成一個vendors.js 文件
2.chunks 參數說明:
2.1.async 異步引?的庫進?分離(默認)
2.2.initial 同步引?的庫進?分離
2.3.all 所有引?的庫進?分離(推薦)
~~~
~~~
moudles.export = {
optimization: {
splitChunks: {
cacheGroups: {
commons: {
test: /(vue)/,
name: 'vendors',
chunks: 'all'
}
}
}
}
}
~~~
~~~
當然配合 'HtmlWebpackPlugin'可以將打包好的js 引入
new HtmlWebpackPlugin({
inlineSource: '.css$',
template: path.join(__dirname, `src/${pageName}/index.html`),
filename: `${pageName}.html`,
chunks: ['vendors', pageName], // vendors 打包后的js文件
inject: true,
minify: {
html5: true,
collapseWhitespace: true,
preserveLineBreaks: false,
minifyCSS: true,
minifyJS: true,
removeComments: false
}
})
~~~
>[danger] ##### 按規則抽取
~~~
1.上面案例抽取的是指定文件vue的,我們也可以按照規則抽取公共的
~~~
~~~
optimization: {
splitChunks: {
minSize: 0, // 分離的包體積的??,0就是任意包
cacheGroups: {
commons: {
name: 'commons',
chunks: 'all',
minChunks: 2 // 設置最?引?次數為2次
}
}
}
}
~~~
>[danger] ##### 關于更多的參考
~~~
module.exports = {
//...
optimization: {
splitChunks: {
// async:異步引入的庫進行分離(默認), initial: 同步引入的庫進行分離, all:所有引入的庫進行分離(推薦)
chunks: 'async',
minSize: 30000, // 抽離的公共包最小的大小,單位字節
maxSize: 0, // 最大的大小
minChunks: 1, // 資源使用的次數(在多個頁面使用到), 大于1, 最小使用次數
maxAsyncRequests: 5, // 并發請求的數量
maxInitialRequests: 3, // 入口文件做代碼分割最多能分成3個js文件
automaticNameDelimiter: '~', // 文件生成時的連接符
automaticNameMaxLength: 30, // 自動自動命名最大長度
name: true, //讓cacheGroups里設置的名字有效
cacheGroups: { //當打包同步代碼時,上面的參數生效
vendors: {
test: /[\\/]node_modules[\\/]/, //檢測引入的庫是否在node_modlues目錄下的
priority: -10, //值越大,優先級越高.模塊先打包到優先級高的組里
filename: 'vendors.js'//把所有的庫都打包到一個叫vendors.js的文件里
},
default: {
minChunks: 2, // 上面有
priority: -20, // 上面有
reuseExistingChunk: true //如果一個模塊已經被打包過了,那么再打包時就忽略這個上模塊
}
}
}
}
};
~~~
[使用SplitChunksPlugin分割代碼](https://www.jianshu.com/p/2cc8457f1a10)
[webapck4抽取公共模塊“SplitChunksPlugin”](https://www.cnblogs.com/xieqian/p/10973039.html)
>[danger] ##### 問答
~~~
1.既想提取靜態資源react,又想提取公共資源還想打到不同的文件里怎么辦,支持數組方式嗎?
'答':可以的,這個cacheGroup 可以配置多個組的。想打包到不同的文件只需要傳到 html-webpack-plugin的
chunk 按照需要設置即可
~~~
- 工程化 -- Node
- vscode -- 插件
- vscode -- 代碼片段
- 前端學會調試
- 谷歌瀏覽器調試技巧
- 權限驗證
- 包管理工具 -- npm
- 常見的 npm ci 指令
- npm -- npm install安裝包
- npm -- package.json
- npm -- 查看包版本信息
- npm - package-lock.json
- npm -- node_modules 層級
- npm -- 依賴包規則
- npm -- install 安裝流程
- npx
- npm -- 發布自己的包
- 包管理工具 -- pnpm
- 模擬數據 -- Mock
- 頁面渲染
- 渲染分析
- core.js && babel
- core.js -- 到底是什么
- 編譯器那些術語
- 詞法解析 -- tokenize
- 語法解析 -- ast
- 遍歷節點 -- traverser
- 轉換階段、生成階段略
- babel
- babel -- 初步上手之了解
- babel -- 初步上手之各種配置(preset-env)
- babel -- 初步上手之各種配置@babel/helpers
- babel -- 初步上手之各種配置@babel/runtime
- babel -- 初步上手之各種配置@babel/plugin-transform-runtime
- babel -- 初步上手之各種配置(babel-polyfills )(未來)
- babel -- 初步上手之各種配置 polyfill-service
- babel -- 初步上手之各種配置(@babel/polyfill )(過去式)
- babel -- 總結
- 各種工具
- 前端 -- 工程化
- 了解 -- Yeoman
- 使用 -- Yeoman
- 了解 -- Plop
- node cli -- 開發自己的腳手架工具
- 自動化構建工具
- Gulp
- 模塊化打包工具為什么出現
- 模塊化打包工具(新) -- webpack
- 簡單使用 -- webpack
- 了解配置 -- webpack.config.js
- webpack -- loader 淺解
- loader -- 配置css模塊解析
- loader -- 圖片和字體(4.x)
- loader -- 圖片和字體(5.x)
- loader -- 圖片優化loader
- loader -- 配置解析js/ts
- webpack -- plugins 淺解
- eslit
- plugins -- CleanWebpackPlugin(4.x)
- plugins -- CleanWebpackPlugin(5.x)
- plugin -- HtmlWebpackPlugin
- plugin -- DefinePlugin 注入全局成員
- webapck -- 模塊解析配置
- webpack -- 文件指紋了解
- webpack -- 開發環境運行構建
- webpack -- 項目環境劃分
- 模塊化打包工具 -- webpack
- webpack -- 打包文件是個啥
- webpack -- 基礎配置項用法
- webpack4.x系列學習
- webpack -- 常見loader加載器
- webpack -- 移動端px轉rem處理
- 開發一個自己loader
- webpack -- plugin插件
- webpack -- 文件指紋
- webpack -- 壓縮css和html構建
- webpack -- 清里構建包
- webpack -- 復制靜態文件
- webpack -- 自定義插件
- wepack -- 關于靜態資源內聯
- webpack -- source map 對照包
- webpack -- 環境劃分構建
- webpack -- 項目構建控制臺輸出
- webpack -- 項目分析
- webpack -- 編譯提速優護體積
- 提速 -- 編譯階段
- webpack -- 項目優化
- webpack -- DefinePlugin 注入全局成員
- webpack -- 代碼分割
- webpack -- 頁面資源提取
- webpack -- import按需引入
- webpack -- 搖樹
- webpack -- 多頁面打包
- webpack -- eslint
- webpack -- srr打包后續看
- webpack -- 構建一個自己的配置后續看
- webpack -- 打包組件和基礎庫
- webpack -- 源碼
- webpack -- 啟動都做了什么
- webpack -- cli做了什么
- webpack - 5
- 模塊化打包工具 -- Rollup
- 工程化搭建代碼規范
- 規范化標準--Eslint
- eslint -- 擴展配置
- eslint -- 指令
- eslint -- vscode
- eslint -- 原理
- Prettier -- 格式化代碼工具
- EditorConfig -- 編輯器編碼風格
- 檢查提交代碼是否符合檢查配置
- 整體流程總結
- 微前端
- single-spa
- 簡單上手 -- single-spa
- 快速理解systemjs
- single-sap 不使用systemjs
- monorepo -- 工程
- Vue -- 響應式了解
- Vue2.x -- 源碼分析
- 發布訂閱和觀察者模式
- 簡單 -- 了解響應式模型(一)
- 簡單 -- 了解響應式模型(二)
- 簡單 --了解虛擬DOM(一)
- 簡單 --了解虛擬DOM(二)
- 簡單 --了解diff算法
- 簡單 --了解nextick
- Snabbdom -- 理解虛擬dom和diff算法
- Snabbdom -- h函數
- Snabbdom - Vnode 函數
- Snabbdom -- init 函數
- Snabbdom -- patch 函數
- 手寫 -- 虛擬dom渲染
- Vue -- minVue
- vue3.x -- 源碼分析
- 分析 -- reactivity
- 好文
- grpc -- 瀏覽器使用gRPC
- grcp-web -- 案例
- 待續