前端构建工具

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

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

常用构建工具: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的功能越来越强大,也迎来诸多对手。

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

相关推荐
范文杰2 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪2 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪2 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy3 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom3 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom3 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom3 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom3 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom4 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试
LaoZhangAI5 小时前
2025最全GPT-4o图像生成API指南:官方接口配置+15个实用提示词【保姆级教程】
前端