iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >webpack动态加载与打包方式
  • 852
分享到

webpack动态加载与打包方式

webpack动态加载webpack打包 2023-02-09 12:02:39 852人浏览 独家记忆
摘要

目录webpack代码拆分上下文模块(contextModule)生成contextModule的方式require(表达式)require.context()函数import()函

WEBpack代码拆分

webpack有两种组织模块依赖的方式,同步和异步。异步依赖作为分割点,形成一个新的块,在优化了依赖树后,每一个异步区块都作为一个文件被打包。

上下文模块(contextModule)

上下文模块有6种类型,分别为sync/lazy/lazy-once/eager/weak/sync-weak

  • sync:直接打包当前文件,同步加载并执行
  • lazy:为每个import()导入的模块生成一个可延迟加载(lazy-loadable)的chunk
  • lazy-once:生成一个可满足所有import()调用的可延迟加载(lazy-loadable)的chunk
  • 此chunk将在第一次import()调用时获取,随后import()则使用相同的网络响应。注意,这种模式仅在动态语句中有意义。例如:import(./locales/${language}.JSON),其中可能含有多个被请求的模块路径。
  • eager:不会分离出单独的chunk文件,但是会返回promise,只有调用promise才会执行代码,可以理解为先加载了代码,但是我们可以控制延迟执行这部分代码。
  • 此模块会阻止webpack生成额外的chunk。所有导入的模块被包含在当前chunk,所以不需要再发额外的网络请求。它仍然返回一个promise,但会被自动resolved。使用eager模式的动态导入与静态导入的区别在于整个模块只有当import()调用之后才会执行

例子:当前Vue文件为Home.vue,同级菜单有一个文件夹pages,它里面有三个文件a.vue, b.vue, c.vue

// 把Home, a, b, c分别打包到不同的chunk中
import('./pages/' + pageId)

// 把Home打成一个chunk,a/b/c统一打包到一个chunk
import( './pages/' + pageId)

// 把Home, a, b, c打包到一个chunk中,且a/b/c中的代码只有在import之后执行(不在chunk加载时执行)
import( './pages/' + pageId)

注意:即使没有引用pages里面的某个文件,也会对其进行打包!

​ 通过上下文组件请求的实际路径是相对于指定目录的相对路径;在这里相对于‘/pages’上下文的路径,即’./a.vue’, ‘./b.vue’, ‘./c.vue’

生成contextModule的方式

require(表达式)

​ require(./locale/${language}.js) 会把匹配到的文件打包进去

require.context()函数

require.context(
  (directory: String),
  (includeSubdirs: Boolean) ,
  (filter: RegExp) ,
  (mode: String)  

​ 一个 context module 会导出一个(require)函数,此函数可以接收一个参数:request。

​ 此导出函数有三个属性:resolve, keys, id。

  • resolve 是一个函数,它返回 request 被解析后得到的模块 id。
  • keys 也是一个函数,它返回一个数组,由所有可能被此 context module 处理的请求组成
  • id 是 context module 的模块 id. 它可能在你使用 module.hot.accept 时会用到

例子:

​ 与当前文件index.js同级目录modules有 aaa/index.js和bbb/index.js两个文件

const modulesFiles = require.context('./modules', true, /index.js$/)
console.log('modulesFiles:', modulesFiles)
// ƒ webpackContext(req) {
//     var id = webpackContextResolve(req);
//     return __webpack_require__(id);
// }
console.log('modulesFiles.keys:', modulesFiles.keys()) // ['./aaa/index.js', './bbb/index.js']

console.log('modulesFiles.resove:', modulesFiles.resolve('./bbb/index.js')) // ./src/store/modules/bbb/index.js

console.log('modulesFiles.id:', modulesFiles.id) // ./src/store/modules sync recursive index.js$

export const modules = modulesFiles.keys().reduce((res, modulePath) => {
  const pathName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1')
  const moduleName = pathName.replace('/index', '')
  const module = modulesFiles(modulePath)
  const dModuleName = module.default.name || ''
  console.log('modulePath:', modulePath)
  console.log('moduleName:', moduleName)
  console.log('module:', module)
  res[dModuleName || moduleName] = module.default
  console.log('res:', res)
  return res
}, {})

import()函数

import(



 


 
`./locale/${language}`
)

require.ensure()函数

require.ensure()已被import()代替

含有环境变量的动态加载

代码运行时通过判断环境变量(例如process.env.NODE_ENV===‘production’),只会打包满足判断条件逻辑分支的请求!!!;

export function getBaseUrl () {
  if (process.env.node_ENV === 'production') {
    require('@/prod.host.js')
    return '/perfORMance/'
  } else {
    const requireHostFiles = require.context('@/api', false, /devHost.js$/)
    return requireHostFiles.keys().includes('./devHost.js') ? requireHostFiles('./devHost.js').devHost : require('@/dev.host.js').devHost
  }
}

如果process.env.NODE_ENV === ‘production’,只会打包 ‘@/prod.host.js’

否则会打包 ‘@/api’下的直属下属文件中满足 /devHost.js$/ 正则的文件, 以及 ‘@/dev.host.js’

到此这篇关于webpack动态加载与打包方式的文章就介绍到这了,更多相关webpack动态加载内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: webpack动态加载与打包方式

本文链接: https://www.lsjlt.com/news/195322.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • webpack动态加载与打包方式
    目录webpack代码拆分上下文模块(contextModule)生成contextModule的方式require(表达式)require.context()函数import()函...
    99+
    2023-02-09
    webpack动态加载 webpack打包
  • webpack自动化打包方式详解
    目录webpack自动化打包重点生产模式与开发模式配置注意几点首先webpack自动化打包 首先下载包 npm i webpack-dev-server -D 配置 webpack....
    99+
    2023-02-09
    webpack自动化打包 webpack打包
  • Java-springboot动态加载jar包,动态配置
    一、概述 1、背景 ​ 目前数据治理服务中有众多治理任务,当其中任一治理任务有改动需要升级或新增一个治理任务时,都需要将数据治理服务重启,会影响其他治理任务的正常运行。 2、目标 能够动态启动、停止任一治理任务能够动态升级、添加治理任务启动...
    99+
    2023-08-21
    spring boot jar java
  • webpack模块加载器兼打包工具怎么用
    这篇文章将为大家详细讲解有关webpack模块加载器兼打包工具怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 什么是 webpack?webpack是近期...
    99+
    2024-04-02
  • 巧用VUE路由动态加载:打造动态、响应式的前端应用
    Vue.js是一个渐进式的JavaScript框架,用于构建用户界面。Vue.js的路由系统是一个功能强大的工具,用于管理单页应用程序(SPA)中的页面导航。Vue路由的动态加载功能可以动态地添加或删除路由,从而实现页面的动态加载。 动...
    99+
    2024-02-13
    Vue.js 路由 动态加载 前端应用
  • webpack如何打包并将文件加载到指定的位置
    这篇文章主要介绍了webpack如何打包并将文件加载到指定的位置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用webpack打包,最爽的...
    99+
    2024-04-02
  • 如何利用vue-cli监测webpack打包与启动时长
    目录说在前面统计build时长统计serve时长统计每次重新编译时长总结说在前面 最近项目同事反馈webpack打包时间过长,修改一次代码就要编译好久,所以我针对我们的项目进行了打包...
    99+
    2024-04-02
  • Webpack 模块加载动态引入机制源码示例解析
    目录TL;DR准备阶段Runtime模块被打包成了什么样子?静态引入动态引入模块联邦引入原理TL;DR 本文基于 Webpack 5 进行讲解,适合不了解 Webpack 把资源编译...
    99+
    2024-04-02
  • Vue多页面配置打包性能优化方式(解决加载包太大加载慢问题)
    目录一、问题描述及解决方案1. 多入口存在的问题2. 我的预期效果3. 可行方案二、方案一:打公共 chunks,单独分离各自的ui库三、方案二:删除默认splitChunk配置,抽...
    99+
    2023-01-14
    Vue多页面配置 Vue打包 Vue加载包太大 Vue加载慢
  • java实现动态编译并动态加载的方法
    小编给大家分享一下java实现动态编译并动态加载的方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在D盘test目录下有个java文件:AlTest.javap...
    99+
    2023-06-14
  • PHP 与 Ajax:创建动态加载内容的解决方案
    ajax(异步 javascript 和 xml)允许在不重新加载页面情况下添加动态内容。使用 php 和 ajax,您可以动态加载产品列表:html 创建一个带有容器元素的页面,aja...
    99+
    2024-05-11
    php ajax mysql 点击事件
  • vue打包添加gzip配置项方式
    目录vue打包添加gzip配置项 关于我写这篇文章的原因vue3.0配置gzip 及 资源404第一步:vue.config.js第二步:这里使用 nginx 进行配置vu...
    99+
    2024-04-02
  • vue项目中如何运用webpack动态配置打包多种环境域名
    这篇文章主要介绍vue项目中如何运用webpack动态配置打包多种环境域名,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在如今前后端分离,各种框架盛行的前端界,对项目的打包要求也越来...
    99+
    2024-04-02
  • linux加载动态库.so的3种方法
            昨天同事联系我,他部署新版本的MS软件提示找不到动态库。但是他能找到这个动态库文件,但不知道如何加载。这样的问题对于我来说是个再简单不过的问题,但对于一个新手,可能就是个打破头都不知道如何解决的问题。所以我想对这个简单问题,...
    99+
    2023-08-31
    linux 运维 服务器
  • 利用Pjax下载动态加载插件方案分享
    目录解决思路处理 Script处理 Head结尾在纯静态网站里,有时候会动态更新某个区域往会选择 Pjax(swup、barba.js)去处理,他们都是使用 ajax 和 pushS...
    99+
    2024-04-02
  • 动态加载JavaScript文件的方法有哪些
    本篇内容介绍了“动态加载JavaScript文件的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一种便是利用ajax方式,把sc...
    99+
    2023-07-04
  • php动态库无法加载的解决方法
    这篇文章主要为大家展示了php动态库无法加载的解决方法,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带大家一起来研究并学习一下“php动态库无法加载的解决方法”这篇文章吧。php有什么用php是一个嵌套的缩写名称,是英文超级...
    99+
    2023-06-06
  • vue3动态加载对话框的方法实例
    目录简介常规方式使用对话框异步动态加载使用方式TestModal.vue使用结果动态操作对话框的实现DzModalService.tsmain.ts总结简介 介绍使用vue3的异步组...
    99+
    2024-04-02
  • VUE 路由动态加载与单页面应用:打造无缝的用户体验
    Vue 路由概述 Vue 路由是一个官方的 Vue.js 路由器,它允许我们在 Vue.js 应用程序中轻松实现页面导航。Vue 路由支持多种路由模式,包括 Hash 模式和 History 模式,并且提供了许多开箱即用的功能,例如导航...
    99+
    2024-02-08
    Vue 路由 动态加载 单页面应用 用户体验
  • 异步动态加载js与css文件的js代码
    jquery动态加载css,js文件方法简单很, 例 方法1: 代码如下复制代码 代码如下:$.getscript("test.js"); 方法2: 代码如下复制代码 代码如下:fu...
    99+
    2022-11-15
    异步动态加载 js css
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作