前端构建工具

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

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

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

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

相关推荐
一路向前的月光40 分钟前
react(9)-redux
前端·javascript·react.js
大数据追光猿1 小时前
Python中的Flask深入认知&搭建前端页面?
前端·css·python·前端框架·flask·html5
莫忘初心丶1 小时前
python flask 使用教程 快速搭建一个 Web 应用
前端·python·flask
xw52 小时前
Trae初体验
前端·trae
横冲直撞de2 小时前
前端接收后端19位数字参数,精度丢失的问题
前端
我是哈哈hh2 小时前
【JavaScript进阶】作用域&解构&箭头函数
开发语言·前端·javascript·html
摸鱼大侠想挣钱2 小时前
ActiveX控件
前端
谢尔登2 小时前
Vue 和 React 响应式的区别
前端·vue.js·react.js
后端小肥肠2 小时前
【AI编程】Java程序员如何用Cursor 3小时搞定CAS单点登录前端集成
前端·后端·cursor
酷酷的阿云2 小时前
Vue3性能优化必杀技:useDebounce+useThrottle+useLazyLoad深度剖析
前端·javascript·vue.js