文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

webpack动态加载与打包方式

2023-02-09 12:01

关注

webpack代码拆分

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

上下文模块(contextModule)

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

例子:当前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。

例子:

​ 与当前文件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动态加载内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯