前端构建工具

一、什么是前端构建工具?

前端构建工具就是在项目开发及编译阶段帮助我们完成那些需要反复重复的任务,比如代码压缩、编译等工作,构建工具能够大大提高我们的开发效率。

常用构建工具:grunt (JavaScript 世界的构建工具)、gulp (用自动化构建工具增强你的工作流程)、webpack (专注于构建模块化项目)、yeoman (强健的工具,库,及工作流程的组合)

二、为什么需要构建工具?

模块规范化产生,不同模块规范下产生的代码不互通,需要解决复杂应用开发代码组织的问题。

1、环境兼容。 浏览器内核不同,页面效果不统一问题(自动补全操作),解决es6在浏览器兼容问题(把源代码转化成浏览器可执行的javascript、css及html代码);

2、性能优化。 文件合并(文件过多,下载耗时,合并减少文件数量),文件压缩(比如去除多余空格和换行,替换变量名为比较短的变量名,减少文件大小);

3、开发效率。 Vendor前缀(构建工具可以自动添加CSS的Vendor前缀),单元测试(提交代码前,构建工具自动跑一遍单元测试),代码分析(使用代码分析工具,可以很好的帮助检查常见问题)。

三、构建工具变化史

javascript语言设计之初,只是作为一个简单的脚本语言用来丰富网站的功能,并不像java、c++那样有module的概念,发展到现在的模样,也经历了相当长的时间。

这段时间,可以简单归纳为:

  1. 青铜时代 - no module;
  2. 白银时代 - cjs、amd、cmd、umd、esm相继出现
  3. 黄金时代 - 组件模块化;

不同的时代,构建工具也不同

1、青铜时代

由于没有module的概念,javascript无法在语言层面实现模块之间的相互隔离、相互依赖,只能由开发人员手动处理。相应的,早期的web开发也比较简单甚至简陋。

  1. 通过对象、iife(或者闭包)的方式实现模块隔离;
  2. 通过手动确定script的加载顺序确定模板之间的依赖关系;
  3. jsp开发模式,没有专门的前端,html、js、css代码通常也由后端开发人员编写。

为了节省宽带和保密,通常需要对前端代码做压缩混淆处理。这个时候,构建工具为YUI TOOL+Ant

2、白银时代

chrome v8引擎和node的横空出世,给前端带来了无限的可能。同时,javascript的模块化标准也有了新的发展。

  1. commonjs规范,适用于node环境开发;
  2. amd、cmd规范,适用于浏览器环境;
  3. umd,兼容amd、commonjs,代码可以同时运行在浏览器和node环境;
  4. ESM,即ES6 module(这个时候还不是很成熟);

同时还出现了less、sass、es6、jslint、eslint、typescript等新的东西,前端角色也承担越来越重要的作用,慢慢的独立出来。

有了node提供的平台,大量的工具开始涌现:

  1. requirejs提供的r.js插件,可以分析amd模块依赖关系、合并压缩js、优化css;
  2. less/sass插件,可以将less/sass代码转化为css代码;
  3. babel,可以将es6转化为es5;
  4. typescript,将ts编译为js;
  5. jslint / eslint,代码检查;

这个时候,我们可以将上面的的这些操作配置成一个个任务,然后通过 Grunt / Gulp 自动执行任务。

3、黄金时代

基于Angular、Vue、React三大框架和Webpack的使用,组件模块化成为前端开发的主流模式。同时ESM规范也越来越成熟,被更多浏览器支持。

以React和Webpack为例,通常我们会将一个应用涉及到的所有的功能拆分为一个个组件,如路由组件、页面组件、表单组件、表格组件等,一个组件对应一个源文件,然后通过webpack将这些源文件打包,在开发过程中,还会通过webpack开启一个local server,实时查看代码的运行效果;

webpack是一个静态模块打包器,它会以entry指定的入口文件为起点,分析整个项目内各个源文件之间的依赖关系,构建一个模块依赖图-module graph,然后将module graph分离为多个bundle。在构建module graph的过程中,会使用loader处理源文件,将他们转化为浏览器可以识别的js、css、image、音视频等。

随着时间的发展,webpack的功能越来越强大,也迎来诸多对手。

目前来看,构建工具在整个前端体系中占据的位置是越来越重要,不懂构建工具已经无法满足日常开发。我们需要时时学习,紧跟时代的脚步,了解最新的技术,不断前进。

相关推荐
神明不懂浪漫14 小时前
【第七章】Java中的常用类
java·开发语言·前端·经验分享·笔记
GuWenyue20 小时前
放弃云端API!一套React+WebGPU本地LLM方案,零数据上传、离线可用
前端·人工智能·前端框架
原则猫21 小时前
函数/变量提升
前端
独泪了无痕1 天前
Vue3 Hooks使用实战解析
前端·vue.js
shawxlee1 天前
vue3在public下封装config.js自定义配置动态数据,可在打包后直接修改,方便后端部署及后续维护
前端·javascript·经验分享·vue·团队开发·js·项目优化
用户059540174461 天前
把记忆存储的回归测试从手工换成 Playwright + GitHub Actions,线上缺陷降低 80%
前端·css
触底反弹1 天前
🚀 从 DOM0 级到 React 合成事件:前端事件监听的 20 年演进史
前端·react.js·面试
kyriewen1 天前
我给前端项目的接口请求套了6层保护——才发现以前一直在裸奔
前端·javascript·面试
颜酱1 天前
04 | 召回前置准备:搭好召回所需的四个数据库
前端·人工智能·后端
郝亚军1 天前
如何安装webstorm、Node.js和vue CLI
前端·javascript·vue.js