Scope Hoisting

Webpack构建出来的文件源码,比如演练是实战中的build.js里面的内容里面包含了大量的函数声明语句,其原因是项目中引用了许多模块,每一个模块都有自己的作用域,导致了代码体积变大,内存开销也较大(函数作用域会消耗内存)。幸运的是Webpack使用Scope Hoisting技术解决了这个问题。

Scope Hoisting可以分析模块之间的依赖关系,最大程度地把零散的模块合并到一个函数中去,如此以来减少了函数声明代码,从而使得输出代码体积更小,内存的开销也变小了。

在mode为production也就是生产环境的时候,Scope Hoisting是默认集成的,如果想再其他环境使用,需要自己进行配置。

要使用Scope Hoisting需保证项目源码采用ES6模块化语法,因此需要修改resolve里面的mainFields配置如下:

resolve: {// 根据9.1.2进行优化modules: [path.resolve(__dirname, '../node_modules')],// 根据 9.12进行优化mainFields: ['jsnext:main', 'main'],// 根据9.1.3进行优化alias: {'@utils': path.resolve(__dirname, '../src/utils'),}
}

这样一来,如果你使用的第三方库提供了ES6模块化的代码,那么就会优先使用ES6模块代码(jsnext:main表示ES6模块化代码的入口),还需要在Plugins中使用如下插件:

plugins: [// 根据9.10进行优化 开启Scope Hoistingnew webpack.optimize.ModuleConcatenationPlugin(),new HtmlwebpackPlugin({// 使用的文件模板template: path.resolve(__dirname, '../src/main/index.html'),// 输出文件名称filename: 'index.html',// 设置页面窗口显示的titletitle: '演练实战'}),// 每次构建,清除上一次构建的内容new CleanwebpackPlugin(),// 根据9.7.1进行优化new MiniCssExtractPlugin({filename: 'css/[name].[hash:5].css',chunkFilename: '[id].css',}),
]

46 webpack优化- Scope Hoisting相关推荐

  1. webpack 的 scope hoisting 是什么?

    原文链接:https://ssshooter.com/2019-02... scope hoisting 是 webpack3 的新功能,直译过来就是「作用域提升」.熟悉 JavaScript 都应该 ...

  2. webpack之Scope Hoisting

    我们先来简单分析一下:(没有开启Scope Hoisting ) 现象:构建后的代码存在大量的闭包代码 [(function (module, __webpack_exports__, __webpa ...

  3. webpack构建中tree shaking、scope Hoisting(面试题)

    一.tree shaking (摇树优化) tree shaking概念: 1个模块可能有多个方法,只要其中某个方法使用了,整个文件会被打到bundle中 tree shaking 只将用到的方法打到 ...

  4. Webpack之Tree Shaking与Scope Hoisting

    Webpack之Tree Shaking与Scope Hoisting 一.Tree Shaking 二.webpack中使用Tree-shanking 三.Scope Hoisting 一.Tree ...

  5. webpack5 基础配置(性能优化)12 DLL Terser Scope Hoisting

    认识DLL库(了解) DLL全称是 动态链接库,是为软件在winodw种实现共享函数库的一种实现方式,而Webpack也内置了DLL的功能,为的就是可以共享,不经常改变的代码,抽成一个共享的库.这个库 ...

  6. webpack优化相关操作

    1.缩小文件搜索的范围 • 优化loader配置 尽量精确使用 include 只命中需要的文件.     module.exports = {       module: {         rul ...

  7. 前端工程化之Webpack优化

    你能所学到的知识点 1.Webpack Loader 和 Plugin 的区别 2.Webpack 生命周期 3.Webpack编译阶段提效 1.减少执行编译的模块 2.提升单个模块构建的速度 3.并 ...

  8. Scope Hoisting(范围提升)

    Scope Hoisting(范围提升) 什么是Scope Hoisting呢? Scope Hoisting从webpack3开始增加的一个新功能: 功能是对作用域进行提升,并且让webpack打包 ...

  9. wepack scope hoisting

    背景 有一次在使用webpack构建组件项目时,需要动态指定publicpath,类似如下的代码: 构建后,在运行态下,发现模块A中,并没有应用动态指定的publicPath.查看了构建后的资源: 可 ...

最新文章

  1. C++11中的std::function
  2. hadoop学习4 调测错误备案
  3. C语言代码输出星期几,C语言程序设计: 输入年月日 然后输出是星期几
  4. C# winform解决解决窗体第一次设置为最大化后,点击最大化按钮窗体无法居中问题...
  5. Javascript常见设计模式解析
  6. emc re 整改 超标_资深EMC工程师总结:EMC整改流程及常见问题
  7. 新MacBook Pro软件安装记录
  8. 弹簧计算器 在线_弹簧启动执行器端点
  9. 如何保证测试质量之Bug管理规范及流程
  10. unity3D 下雨效果实现
  11. 屏幕尺寸、分辨率、视口笔记
  12. 【java之汉字转拼音】
  13. SAS JAVA基础开发包下载
  14. STM32超声波模块(HC-SR04\US015)测试程序-HAL库函数
  15. 【c语言】厄密多项式--用递归实现
  16. 计算机操作系统《第四版》第一章 操作系统引论(思维导图)
  17. Ubuntu 20.04增加Deepin源以安装应用商城内最新版的微信、钉钉
  18. xshell执行sql脚本
  19. Hyperion Services启动顺序
  20. ntp服务器udp协议,windows2003 2008 2012 2016 2019封UDP协议服务器自动同步时间

热门文章

  1. html嵌入视频mp4视频无法播放,html中嵌入mp4格式视频无法播放
  2. 用Python分析北京市蛋壳公寓租房数据
  3. 使用污点分析检查log4j问题
  4. 【BIM+GIS】Revit在ArcGIS Pro中的组织方式详解
  5. ThinkPHP怪现象:数据表新增字段后开发模式可更新运行模式无法更新
  6. python args[0_python args参数处理
  7. 基于.NET 的一些开源框架和项目
  8. 魏其武安侯列传第四十七
  9. 【Cocos游戏】正版《变形金刚:崛起》跻身千万级手游阵营
  10. MySQL数据库存储引擎以及数据库的创建、修改与删除