webpack4從0搭建組件庫(kù)的實(shí)現(xiàn)
代碼分離
代碼分離方法有三種:
- 入口起點(diǎn):使用 entry 配置手動(dòng)地分離代碼。
- 防止重復(fù):使用 SplitChunksPlugin 去重和分離 chunk。
- 動(dòng)態(tài)導(dǎo)入:通過(guò)模塊中的內(nèi)聯(lián)函數(shù)調(diào)用來(lái)分離代碼。
動(dòng)態(tài)導(dǎo)入(dynamic imports)
- import()
- require.ensure
預(yù)取/預(yù)加載模塊(prefetch/preload module)
webpack v4.6.0+ 添加了預(yù)取和預(yù)加載的支持。
在聲明 import 時(shí),使用下面這些內(nèi)置指令,可以讓 webpack 輸出 "resource hint(資源提示)",來(lái)告知瀏覽器:
- prefetch(預(yù)取):將來(lái)某些導(dǎo)航下可能需要的資源
- preload(預(yù)加載):當(dāng)前導(dǎo)航下可能需要資源
配置項(xiàng)重點(diǎn)詳解
(1)mode: "pruduction"
啟用 minification(代碼壓縮) 和 tree shaking (usedExports:true)
自動(dòng)指定DefinePlugin:process.env.NODE_ENV === 'production'
(2)devtool
source map 簡(jiǎn)介
生產(chǎn)環(huán)境:source-map
開(kāi)發(fā)環(huán)境:inline-source-map
(3)optimization
splitChunks
splitChunks: { chunks: 'all', // 提取公共模塊 loadash // 將第三方庫(kù)(library)(例如 lodash 或 react)提取到單獨(dú)的 vendor chunk 文件中,是比較推薦的做法 // 利用 client 的長(zhǎng)效緩存機(jī)制,命中緩存來(lái)消除請(qǐng)求,并減少向 server 獲取資源,同時(shí)還能保證 client 代碼和 server 代碼版本一致。 cacheGroups: { vendor: { test: /[\\/]node_modules[\\/]/, name: 'vendors', chunks: 'all' } } },
runtimeChunk
runtimeChunk: 'single' // 提取引導(dǎo)模板 將 runtime 代碼拆分為一個(gè)單獨(dú)的 chunk
(5)output
// filename: '[name].[contenthash].js', // content hash 內(nèi)容變化才會(huì)變化 filename: 'webpack-numbers.js', path: path.resolve(__dirname, 'dist'), // 暴露 library 這是庫(kù)名稱 import from 'webpackNumbers' library: 'webpackNumbers', libraryTarget: 'umd'
(6)plugins
HashedModuleIdsPlugin
const { HashedModuleIdsPlugin } = require('webpack'); plugins: [ // 不會(huì)因模塊增加和減少導(dǎo)致的模塊內(nèi)容變化,增加長(zhǎng)緩存命中機(jī)制 new HashedModuleIdsPlugin() ],
BundleAnalyzerPlugin
分析打包代碼
const {BundleAnalyzerPlugin} = require('webpack-bundle-analyzer'); plugins: [ new BundleAnalyzerPlugin() ]
到此這篇關(guān)于webpack4從0搭建組件庫(kù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)webpack4搭建組件庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
wap手機(jī)圖片滑動(dòng)切換特效無(wú)css3元素js腳本編寫(xiě)
手機(jī)圖片滑動(dòng)切換,網(wǎng)上有很多這樣的例子,但都借助于其他組件,讓代碼混亂的不行,本例無(wú)css3元素js腳本編寫(xiě),需要的朋友可以參考下2014-07-07ionic 3.0+ 項(xiàng)目搭建運(yùn)行環(huán)境的教程
本篇文章主要介紹了ionic 3.0+ 項(xiàng)目搭建運(yùn)行的教程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08JavaScript樹(shù)的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法示例
這篇文章主要介紹了JavaScript樹(shù)的深度優(yōu)先遍歷和廣度優(yōu)先遍歷算法,結(jié)合實(shí)例形式分析了JavaScript樹(shù)的深度優(yōu)先遍歷、廣度優(yōu)先遍歷遞歸與非遞歸相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-07-07基于JS實(shí)現(xiàn)橫線提示輸入驗(yàn)證碼隨驗(yàn)證碼輸入消失(js驗(yàn)證碼的實(shí)現(xiàn))
最近在開(kāi)微信的頁(yè)面,在項(xiàng)目需求中遇到之前沒(méi)有做過(guò)的功能,要求橫線提示輸入驗(yàn)證碼隨驗(yàn)證碼輸入橫線消失,基于js怎么實(shí)現(xiàn)的呢?下面小編給大家分享基于js實(shí)現(xiàn)驗(yàn)證碼功能,感興趣的朋友一起看看吧2016-10-10js將列表組裝成樹(shù)結(jié)構(gòu)的兩種實(shí)現(xiàn)方式分享
最近做的任務(wù)提了新的需求,需要實(shí)現(xiàn)一個(gè)樹(shù)形結(jié)構(gòu),所以下面這篇文章主要給大家介紹了關(guān)于js將列表組裝成樹(shù)結(jié)構(gòu)的兩種實(shí)現(xiàn)方式,需要的朋友可以參考下2022-01-01JavaScript實(shí)現(xiàn)動(dòng)態(tài)刪除列表框值的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)動(dòng)態(tài)刪除列表框值的方法,涉及javascript針對(duì)select列表框的遍歷與刪除操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08es6中使用map簡(jiǎn)化復(fù)雜條件判斷操作實(shí)例詳解
這篇文章主要介紹了es6中使用map簡(jiǎn)化復(fù)雜條件判斷操作,結(jié)合實(shí)例形式詳細(xì)分析了傳統(tǒng)方法與map簡(jiǎn)化復(fù)雜條件判斷的相關(guān)操作技巧,需要的朋友可以參考下2020-02-02javascript實(shí)現(xiàn)按回車鍵切換焦點(diǎn)
這篇文章主要介紹了javascript實(shí)現(xiàn)按回車鍵切換焦點(diǎn)的方法,需要的朋友可以參考下2015-02-02JavaScript中 this 指向問(wèn)題深度解析
這篇文章主要介紹了JavaScript中 this 指向問(wèn)題深度解析,JavaScript 中的 this 指向問(wèn)題有很多文章在解釋,仍然有很多人問(wèn),本文給大家深度解析,需要的朋友可以參考下2017-02-02