当前位置: 首页 > article >正文

前端问题小结

vite和 webpack 的区别

Vite 和 Webpack 都是现代前端开发中常用的构建工具,它们在很多方面有相似之处,但也存在一些关键的区别:

  1. 构建方式

    • Webpack:是一个模块打包器(bundler),它会将项目中的所有模块(JavaScript、CSS、图片等)打包成一个或多个 bundle,适用于大型应用。

    • Vite:在开发环境下使用原生 ES 模块导入(ESM),利用现代浏览器的原生支持来提供快速的冷启动和热更新。在生产环境下,Vite 使用 Rollup 进行打包。

  2. 性能

    • Webpack:在开发环境下,由于需要构建和打包,启动和热更新可能会比较慢。

    • Vite:由于在开发环境中避免了打包,Vite 通常能提供更快的启动时间和热更新。

  3. 配置

    • Webpack:配置相对复杂,需要手动配置 loader 和 plugin。

    • Vite:配置相对简单,许多功能(如 TypeScript、CSS 预处理器等)在默认情况下已经内置。

  4. 插件和生态系统

    • Webpack:拥有庞大的插件生态系统,社区支持非常丰富。

    • Vite:作为一个较新的工具,其生态系统正在快速发展,但可能不如 Webpack 那么成熟。

  5. 兼容性

    • Webpack:支持所有浏览器,包括旧版浏览器。

    • Vite:主要针对现代浏览器,对于旧版浏览器的支持可能需要额外的配置。

  6. 使用场景

    • Webpack:适合大型、复杂的项目,需要高度定制化构建流程。

    • Vite:适合中小型项目,或者需要快速开发和迭代的场景。

  7. 特性

    • Webpack:提供了丰富的特性,如代码分割、懒加载、热模块替换(HMR)等。

    • Vite:提供了类似的特性,但实现方式可能不同,例如利用浏览器的原生 ESM 特性。

  8. 学习曲线

    • Webpack:对于初学者来说,可能有一定的学习曲线,因为需要理解其复杂的配置和概念。

    • Vite:对于熟悉现代前端开发的人来说,学习曲线相对较低。

webpack插件和loader的作用

Webpack 是一个模块打包工具,它通过使用插件(Plugins)和加载器(Loaders)来扩展其核心功能。下面是它们各自的作用:

Webpack Loaders

Loaders 让 Webpack 能够处理那些非 JavaScript 文件(例如 TypeScript、图片、CSS 等)。Loaders 可以转换文件,或者对它们进行其他类型的处理。

  1. 转换文件:Loaders 可以将不同类型的文件转换为 webpack 能够处理的有效模块。例如,可以将 TypeScript 转换为 JavaScript,或者将 SASS/LESS 转换为 CSS。

  2. 提供额外的语法:Loaders 允许你在 import 语句中直接使用新的语法,例如 import CSS 文件或图片。

  3. 优化文件:Loaders 可以压缩文件,例如压缩图片或 JavaScript 文件。

  4. 其他处理:Loaders 还可以进行其他类型的文件处理,比如对 Markdown 文件进行解析。

Loaders 在 webpack.config.js 文件中的 module.rules 部分进行配置。

Webpack Plugins

Plugins 为 Webpack 提供了更多的自定义功能,它们在 Webpack 的构建过程中的一些特定时机被调用。

  1. 扩展 Webpack 的功能:Plugins 可以用于优化、压缩、清理输出目录、复制静态资源等。

  2. 影响构建过程:Plugins 可以访问 Webpack 的事件钩子(hooks),在构建过程中的特定时机执行代码。

  3. 生成文件:有些 Plugins 可以生成新的文件,比如生成 index.html 文件。

  4. 环境变量:Plugins 可以用来定义环境变量,比如区分开发和生产环境。

  5. 提供服务:Plugins 可以提供热模块替换(HMR),懒加载等高级功能。

Plugins 在 webpack.config.js 文件中的 plugins 数组中进行配置。

区别

  • Loaders 处理单个文件:Loaders 主要用于转换和处理模块,它们作用于单个文件。

  • Plugins 作用于整个构建过程:Plugins 作用于整个 Webpack 构建过程,可以影响资产的生成、启动服务器、环境变量等。

工程化的模式

  1. BEM (Block Element Modifier)

    • Block:代表一个独立的组件或实体。

    • Element:是Block的一部分,不能单独存在。

    • Modifier:用于修改Block或Element的样式或行为。

  2. OOCSS (Object-Oriented CSS)

    • 强调将样式设计成独立的、可复用的对象。

    • 避免重复的样式代码,提高样式的可复用性。

  3. SMACSS (Scalable and Modular Architecture for CSS)

    • 将样式分为五个类别:基础、布局、模块、状态和主题。

    • 旨在创建可扩展和模块化的样式表。

  4. SUIT CSS

    • 类似于BEM,但是更简洁。

    • 使用连字符分隔的命名约定,如Button--primary

  5. Atomic CSS (或称为Utility-First CSS)

    • 每个类只做一件事,不依赖于上下文。

    • 类似于OOCSS,但是更注重功能性而非选择器的层次结构。

  6. ITCSS (Inverted Triangle CSS)

    • 从全局样式到具体样式,形成一个倒置的三角形结构。

    • 包括:设置、工具、常规、组件、布局和覆盖。

  7. BEMITU (BEM Improved with Tools and Utilities)

    • 是BEM的扩展,通过工具和实用程序类来增强。

    • 结合了BEM的组件思维和Atomic CSS的实用性。

  8. CSS-in-JS

    • 不是一种传统意义上的样式设计模式,而是一种在JavaScript中编写样式的方法。

    • 允许动态生成样式,并且可以利用JavaScript的计算能力。

  9. DECSS (Design-First CSS)

    • 强调首先设计样式,然后再编写HTML。

    • 通常与CSS预处理器结合使用,以实现更复杂的设计。

  10. MVCSS (Methodical Velocity CSS)

    • 旨在提高开发速度和样式代码的性能。

    • 强调样式的可预测性和一致性。

  11. Tailwind CSS

    • 一种实用优先的CSS框架,提供了大量的实用工具类。

    • 开发者可以直接在HTML中使用这些类来构建界面。

  12. Bootstrap

    • 一个流行的前端框架,提供了一套预定义的样式和组件。

    • 通过栅格系统、组件和JavaScript插件来加速开发。

最近老是有人说我不更新,现在就更新了


http://www.kler.cn/a/325191.html

相关文章:

  • 哋它亢SEO技术分析:如何提升网站在搜索引擎中的可见性
  • python读写excel等数据文件方法汇总
  • 【蓝桥杯备赛】深秋的苹果
  • 前端:HTML (学习笔记)【1】
  • 力扣第 55 题 跳跃游戏
  • 「Mac玩转仓颉内测版14」PTA刷题篇5 - L1-005 考试座位号
  • 大模型,互联网玩家们的「角斗场」
  • 算法【Java】—— 位运算
  • python中logging的用法
  • python基础库
  • 铺铜修改后自动重铺
  • 第十一章 【前端】调用接口(11.1)——Vite 环境变量
  • Redis(初步认识和安装)
  • 智慧城市交通管理中的云端多车调度与控制
  • vue打包后的dist文件如何启动测试
  • Midjourney参数详解
  • 经纬仪应用前景
  • leetcode刷题day29|贪心算法Part03( 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列)
  • 建筑资质应该怎么选?
  • LeetCode 每日一题 2024/9/23-2024/9/29
  • Java项目实战II基于Java+Spring Boot+MySQL的网上摄影工作室(源码+数据库+文档)
  • Qemu开发ARM篇-5、buildroot制作根文件系统并挂载启动
  • 常见字符函数和字符串函数(上)
  • 在Linux中修改vm.max_map_count参数的步骤
  • InternVL 微调实践
  • C#里使用最简单的线程调用界面更新的方法