首页 > 其他分享 >webpack

webpack

时间:2023-02-06 09:55:34浏览次数:48  
标签:文件 压缩 编译 webpack 模块 打包

web网页pack打包 简称网页打包(HTML,CSS,JavaScript)

官网介绍:

webpack 是一个用于现代 JavaScript 应用程序的静态模块打包工具。我们可以使用webpack管理模块。因为在webpack看来,项目中的所有资源皆为模块,通过分析模块间的依赖关系,在其内部构建出一个依赖图,最终编绎输出模块为 HTML、JavaScript、CSS 以及各种静态文件(图片、字体等),让我们的开发过程更加高效。

webpack的主要作用如下:

  • 模块打包。可以将不同模块的文件打包整合在一起,并且保证它们之间的引用正确,执行有序。利用打包我们就可以在开发的时候根据我们自己的业务自由划分文件模块,保证项目结构的清晰和可读性。
  • 编译兼容。在前端的“上古时期”,手写一堆浏览器兼容代码一直是令前端工程师头皮发麻的事情,而在今天这个问题被大大的弱化了,通过webpackLoader机制,不仅仅可以帮助我们对代码做polyfill,还可以编译转换诸如.less.vue.jsx这类在浏览器无法识别的格式文件,让我们在开发的时候可以使用新特性和新语法做开发,提高开发效率。
  • 能力扩展。通过webpackPlugin机制,我们在实现模块化打包编译兼容的基础上,可以进一步实现诸如按需加载,代码压缩等一系列功能,帮助我们进一步提高自动化程度,工程效率以及打包输出的质量。

webpack的构建流程?

webpack的运行流程是一个串行的过程,从启动到结束会依次执行以下流程:

  • 初始化参数:从配置文件和 Shell 语句中读取与合并参数,得出最终的参数
  • 开始编译:用上一步得到的参数初始化 Compiler 对象,加载所有配置的插件,执行对象的 run 方法开始执行编译
  • 确定入口:根据配置中的 entry 找出所有的入口文件
  • 编译模块:从入口文件出发,调用所有配置的 loader 对模块进行翻译,再找出该模块依赖的模块,再递归本步骤直到所有入口依赖的文件都经过了本步骤的处理
  • 完成模块编译:在经过上一步使用 loader 翻译完所有模块后,得到了每个模块被翻译后的最终内容以及它们之间的依赖关系
  • 输出资源:根据入口和模块之间的依赖关系,组装成一个个包含多个模块的 Chunk,再把每个 Chunk 转换成一个单独的文件加入到输出列表,这步是可以修改输出内容的最后机会
  • 输出完成:在确定好输出内容后,根据配置确定输出的路径和文件名,把文件内容写入到文件系统

简单说:

  • 初始化:启动构建,读取与合并配置参数,加载 Plugin,实例化 Compiler
  • 编译:从 entry 出发,针对每个 Module 串行调用对应的 loader 去翻译文件的内容,再找到该 Module 依赖的 Module,递归地进行编译处理
  • 输出:将编译后的 Module 组合成 Chunk,将 Chunk 转换成文件,输出到文件系统中

 

如何提高webpack的构建速度?

1.代码压缩
  • JS压缩
    webpack 4.0默认在生产环境的时候是支持代码压缩的,即mode=production模式下。 实际上webpack 4.0默认是使用terser-webpack-plugin这个压缩插件,在此之前是使用 uglifyjs-webpack-plugin,两者的区别是后者对 ES6 的压缩不是很好,同时我们可以开启 parallel参数,使用多进程压缩,加快压缩。
  • CSS压缩
    CSS 压缩通常是去除无用的空格等,因为很难去修改选择器、属性的名称、值等。可以使用另外一个插件:css-minimizer-webpack-plugin
  • HTML压缩
    使用HtmlWebpackPlugin插件来生成 HTML 的模板时候,通过配置属性minify进行 html 优化。

                                         

2.图片压缩
配置image-webpack-loader

3.Tree Shaking
Tree Shaking是一个术语,在计算机中表示消除死代码,依赖于ES Module的静态语法分析(不执行任何的代码,可以明确知道模块的依赖关系)。 在webpack实现Tree shaking有两种方案:

usedExports:通过标记某些函数是否被使用,之后通过 Terser 来进行优化的

                                             

  • 使用之后,没被用上的代码在webpack打包中会加入unused harmony export mul注释,用来告知Terser在优化时,可以删除掉这段代码。
  • sideEffects:跳过整个模块/文件,直接查看该文件是否有副作用
    sideEffects用于告知webpack compiler哪些模块时有副作用,配置方法是在package.json中设置sideEffects属性。如果sideEffects设置为false,就是告知webpack可以安全的删除未用到的exports。如果有些文件需要保留,可以设置为数组的形式,如:

            

缩小打包域

排除webpack不需要解析的模块,即在使用loader的时候,在尽量少的模块中去使用。可以借助 includeexclude这两个参数,规定loader只在那些模块应用和在哪些模块不应用。

 

 

标签:文件,压缩,编译,webpack,模块,打包
From: https://www.cnblogs.com/lmj9911/p/17094529.html

相关文章

  • webpack-cnblog
    1.webpack定义用于现代JavaScript的静态模块打包工具解决的问题模块依赖代码编写less转cssts转js开发效率热加载项目优化压缩,打包2.load......
  • Webpack解析与讲解
    一、什么是Webpack?一个基于node.js的前端模块化/预处理/扁平化处理器。二、为什么要使用Webpack? 解决业务代码中的各种依赖,模块加载,静态文件引入问题(重复依赖/......
  • webpack核心用法,为什么要使用webpack
    一:为什么使用webpack1.代码转换、文件优化、代码分割、模块合并、自动刷新、等等 2.webpack上手<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF......
  • Webpack chunk All In One
    WebpackchunkAllInOneWebpack分包打包优化/性能优化dynamicimportscodesplittingcode-splittinghttps://webpack.js.org/guides/code-splitting/https:/......
  • webpack教程
    安装webpack新建项目的目录,并将命令行切换到该目录下:mkdirwebpackdemo&&cdwebpackdemo初始化项目(我们自己开发的npm包,)npminit-y把webpack和webpack-cli安装到项目本地......
  • 一文详解如何在基于webpack5的react项目中使用svg
    本文主要讨论基于webpack5+TypeScript的React项目(cra、craco底层本质都是使用webpack,所以同理)在2023年的今天是如何在项目中使用svg资源的。首先,假定您已经完成基于webpac......
  • 【个人笔记】2023年搭建基于webpack5与typescript的react项目
    写在前面由于我在另外的一些文章所讨论或分析的内容可能基于一个已经初始化好的项目,为了避免每一个文章都重复的描述如何搭建项目,我在本文会统一记录下来,今后相关的文章直......
  • react,webpack,antd的版本依赖关系
    调试react导航栏的时发现,reactwebpackantd这三个基础框架之间隐含这版本兼容性关系。也就是说,这几个框架的版本必须协调适应。如果不匹配对应的版本,就会出现各种各样......
  • 【解决webpack-dev-server 动态配置代理问题】
    【解决webpack-dev-server动态配置代理问题】:https://code84.com/723524.html#devServerproxy_12 文章目录前言一、devServer-proxy二、配置方式1.配置多个......
  • vue3学习之---webpack配置【resolve.alias修改】
    在vue3中,脚手架生成的项目里,webpack的配置文件没有了,因为公共的配置被封装到安装包里了,可以找到如下目录,同样可以修改配置文件:node_modules》@vue》cli-service   ......