webpack5?import動態(tài)導(dǎo)入實(shí)現(xiàn)按需加載并給文件統(tǒng)一命名的配置方法
想要實(shí)現(xiàn)按需加載,動態(tài)導(dǎo)入模塊。還需要額外配置:
console.log("hello main");
document.getElementById("btn").onClick = function () {
// 動態(tài)導(dǎo)入 --> 實(shí)現(xiàn)按需加載 -->then是加載成功要做的處理不處理的話可以不寫
import( "./js/math.js").then(({ count }) => {
console.log(count(2, 1));
});
};效果:

如果沒有配置命名規(guī)則打包后就是這樣的隨機(jī)
1.修改文件
main.js
console.log("hello main");
document.getElementById("btn").onClick = function () {
// 動態(tài)導(dǎo)入 --> 實(shí)現(xiàn)按需加載 -->then是加載成功要做的處理不處理的話可以不寫
// eslint會對動態(tài)導(dǎo)入語法報(bào)錯(cuò),需要修改eslint配置文件
// webpackChunkName: "math":這是webpack動態(tài)導(dǎo)入模塊命名的方式
// "math"將來就會作為[name]的值顯示。
import(/* webpackChunkName: "math" */ "./js/math.js").then(({ count }) => {
console.log(count(2, 1));
});
};eslint 配置
// .eslintrc.js
module.exports = {
// 繼承 Eslint 規(guī)則
extends: ["eslint:recommended"],
env: {
node: true, // 啟用node中全局變量
browser: true, // 啟用瀏覽器中全局變量
},
// 解決動態(tài)導(dǎo)入import語法報(bào)錯(cuò)問題 --> 實(shí)際使用eslint-plugin-import的規(guī)則解決的
plugins: ["import"],
parserOptions: {
ecmaVersion: 6,
sourceType: "module",
},
};webpack.config.js
chunkFilename 加入chunk字段是為了與主文件區(qū)分
module.exports = {
entry: "./src/main.js",
output: {
filename: "static/js/[name].js", // 入口文件打包輸出資源命名方式
chunkFilename: "static/js/[name].chunk.js", // 動態(tài)導(dǎo)入輸出資源命名方式
assetModuleFilename: "static/media/[name].[hash][ext]", // 圖片、字體等資源命名方式(注意用hash)
},
module: {
rules: [
// loader的配置
{
oneOf: [
// https://webpack.docschina.org/guides/asset-modules/#resource-assets
{
test: /\.(png|jpe?g|gif|webp|svg)$/, //$匹配結(jié)尾,在多行檢測中,會匹配一行的結(jié)尾
type: "asset", //轉(zhuǎn)base64
parser: {
dataUrlCondition: {
maxSize: 10 * 1024, // 小于10kb的圖片轉(zhuǎn)為base64,用于減少請求數(shù)據(jù),但體積會大一點(diǎn)點(diǎn)
},
},
// generator: {assetModuleFilename統(tǒng)一定義
// // 生成輸出的圖片名字[hash:10]表示只取前10位
// // ext:擴(kuò)展名
// // query圖片參數(shù)
// filename: "static/images/[hash:10][ext][query]",
// },
},
{
test: /\.(ttf|woff2?|mp3|mp4|avi)$/, //匹配字體圖標(biāo)庫或者視頻文件
type: "asset/resource", //resource對文件原樣的輸出
// generator: { assetModuleFilename 統(tǒng)一定義
// //輸出media名稱
// filename: "static/media/[hash:10][ext][query]",
// },
},
]
}
]
},
plugins: [
//如果用到了css插件也要改一下
// 提取css成單獨(dú)文件
new MiniCssExtractPlugin({
// 定義輸出文件名和目錄
filename: "static/css/[name].css",
chunkFilename: "static/css/[name].chunk.css",
}),
],
optimization: {
minimizer: [
// 代碼分割配置
splitChunks: {
chunks: "all", // 對所有模塊都進(jìn)行分割
// 其他內(nèi)容用默認(rèn)配置即可
},
// 提取runtime文件(防止被依賴的主文件隨著變化而變化)
runtimeChunk: {
name: (entrypoint) => `runtime~${entrypoint.name}`, // runtime文件命名規(guī)則
},
]}
}
命名后的打包樣式

比如:是用戶點(diǎn)擊按鈕時(shí)才加載這個(gè)資源的,如果資源體積很大,那么用戶會感覺到明顯卡頓效果
如果我們想在瀏覽器空閑時(shí)間,加載后續(xù)需要使用的資源。我們就需要用上 Preload 或 Prefetch 技術(shù)。可以參考
到此這篇關(guān)于webpack5 import動態(tài)導(dǎo)入實(shí)現(xiàn)按需加載并給文件統(tǒng)一命名的文章就介紹到這了,更多相關(guān)webpack5 import按需加載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用document.documentElement取代document.body的原因分析
ll建議用document.documentElement代替document.body2009-11-11
解決Layui數(shù)據(jù)表格中checkbox位置不居中的方法
今天小編就為大家分享一篇解決Layui數(shù)據(jù)表格中checkbox位置不居中的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
js阻止默認(rèn)瀏覽器行為與冒泡行為的實(shí)現(xiàn)代碼
下面小編就為大家?guī)硪黄猨s阻止默認(rèn)瀏覽器行為與冒泡行為的實(shí)現(xiàn)代碼。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-05-05
JavaScript數(shù)據(jù)推送Comet技術(shù)詳解
這篇文章主要為大家詳細(xì)介紹了JavaScript數(shù)據(jù)推送Comet技術(shù),感興趣的小伙伴們可以參考一下2016-04-04
基于JS實(shí)現(xiàn)視頻上傳顯示進(jìn)度條
這篇文章主要介紹了基于JS實(shí)現(xiàn)視頻上傳顯示進(jìn)度條,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
使用post方法實(shí)現(xiàn)json往返傳輸數(shù)據(jù)的方法
今天小編就為大家分享一篇關(guān)于使用post方法實(shí)現(xiàn)json往返傳輸數(shù)據(jù)的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03
微信小程序日期增加時(shí)間完成訂單失效倒計(jì)時(shí)效果
這篇文章主要介紹了微信小程序日期增加時(shí)間完成訂單失效倒計(jì)時(shí)效果,在我們?nèi)粘Y徫镞^程中經(jīng)常會遇到這樣的功能,本文通過示例代碼給大家詳細(xì)講解,需要的朋友參考下吧2024-04-04

