前端工程化——构建工具选型

article/2025/11/3 19:22:15

一、什么是前端工程化

前端工程化是依据业务特点,将前端开发的规范、流程、技术、工具、经验等形成规范并建立成一种标准的体系。

二、为什么要前端工程化

实现前端工程化的目的简单来说就是通过流程规范、自动化工具来提升前端的开发效率、性能、质量、多人协作能力以及开发体验。

近几年前端仍保持较高的速度发展,前端开发面临着的流程、资源组织和协同开发等各方面的挑战,所以建立前端工程化是各个团队必经的成长过程。

但由于每个公司、每个团队甚至每个项目都有自己的特点,所以这里先暂时抛开规范、流程、技术这些主观的东西,从工具入手,聊聊工具的特性及适应场景,从而找到最适合自己团队项目的工程化方案。

三、构建工具

构建工具的主要功能就是实现自动化处理,例如对代码进行检查、预编译、合并、压缩;生成雪碧图、sourceMap、版本管理;运行单元测试、监控等,当然有的工具还提供模块化、组件化的开发流程功能。

网上各类的构建工具非常多,有家喻户晓的 Grunt、Gulp、Webpack,也有各大公司团队开源的构建工具,这里通过 Github 的 Star 数量来简单的对比下各个工具的流行度:

stars.png

如果把工具按类型分可以分为这三类:

  1. 基于任务运行的工具:
    Grunt、Gulp
    它们会自动执行指定的任务,就像流水线,把资源放上去然后通过不同插件进行加工,它们包含活跃的社区,丰富的插件,能方便的打造各种工作流。

  2. 基于模块化打包的工具:
    Browserify、Webpack、rollup.js
    有过 Node.js 开发经历的应该对模块很熟悉,需要引用组件直接一个 require 就 OK,这类工具就是这个模式,还可以实现按需加载、异步加载模块。

  3. 整合型工具:
    Yeoman、FIS、jdf、Athena、cooking、weflow
    使用了多种技术栈实现的脚手架工具,好处是即开即用,缺点就是它们约束了技术选型,并且学习成本相对较高。

四、构建工具选型

在做选型的时候,我们往往会考虑以下几个因素:

  1. 是否符合团队的技术栈
  2. 是否符合项目需求
  3. 生态圈是否完善、社区是否活跃

还是排除 1、2 主观的因素,我们在不同类型的工具中选择几个热门(满足因素3),也就是:Grunt、Gulp、Webpack、Yeoman 看看它们的工作流、优劣点以及适用场景。

1、Grunt & Gulp

工作流:
这两款工具都是基于任务类型,所以它们的工作流是一致的:

gulp_workflow.png

可以看到它们打包的策略通常是 All in one,最后页面还是引用 css、img、js,开发流程与徒手开发相比并无差异。

特点与不足
Grunt
Grunt 是老牌的构建工具,特点是配置驱动,你需要做的就是了解各种插件的功能,然后把配置整合到 Gruntfile.js 中,可以看下面的配置例子,简单直接:


module.exports = function(grunt) {grunt.initConfig({jshint: {files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js'],options: {globals: {jQuery: true}}},watch: {files: ['<%= jshint.files %>'],tasks: ['jshint']}});grunt.loadNpmTasks('grunt-contrib-jshint');grunt.loadNpmTasks('grunt-contrib-watch');grunt.registerTask('default', ['jshint']);
};

Grunt 缺点也是配置驱动,当任务非常多的情况下,试图用配置完成所有事简直就是个灾难;再就是它的 I/O 操作也是个弊病,它的每一次任务都需要从磁盘中读取文件,处理完后再写入到磁盘,例如:我想对多个 less 进行预编译、压缩操作,那么 Grunt 的操作就是:

读取 less 文件 -> 编译成 css -> 存储到磁盘 -> 读取 css -> 压缩处理 -> 存储到磁盘

这样一来当资源文件较多,任务较复杂的时候性能就是个问题了。

Gulp
Gulp 特点是代码驱动,写任务就和写普通的 Node.js 代码一样:


var gulp = require('gulp');
var pug = require('gulp-pug');
var less = require('gulp-less');
var minifyCSS = require('gulp-csso');gulp.task('html', function(){return gulp.src('client/templates/*.pug').pipe(pug()).pipe(gulp.dest('build/html'))
});gulp.task('css', function(){return gulp.src('client/templates/*.less').pipe(less()).pipe(minifyCSS()).pipe(gulp.dest('build/css'))
});gulp.task('default', [ 'html', 'css' ]);

再一个对文件读取是流式操作(Stream),也就是说一次 I/O 可以处理多个任务,还是 less 的例子,Gulp 的流程就是:

读取 less 文件 -> 编译成 css -> 压缩处理 -> 存储到磁盘

Gulp 作为任务类型的工具没有明显的缺点,唯一的问题可能就是完成相同的任务它需要写的代码更多一些,所以除非是项目有历史包袱(原有项目就是基于 Grunt 构建)在 Grunt 与 Gulp 对比看来还是比较推荐 Gulp!

适用场景:
通过上面的介绍可以看出它们侧重对整个过程的控制管理,实现简单、对架构无要求、不改变开发模式,所以非常适合前端、小型、需要快速启动的项目。

2、Webpack
Webpack 是目前最热门的前端资源模块化管理和打包工具,还是先通过一张图大致了解它的运行方式:

工作流

webpack_workflow.png

 

特点与不足
Webpack 的特点:

  1. 把一切都视为模块:不管是 CSS、JS、Image 还是 HTML 都可以互相引用,通过定义 entry.js,对所有依赖的文件进行跟踪,将各个模块通过 loader 和 plugins 处理,然后打包在一起。
  2. 按需加载:打包过程中 Webpack 通过 Code Splitting 功能将文件分为多个 chunks,还可以将重复的部分单独提取出来作为 commonChunk,从而实现按需加载。

Webpack 也是通过配置来实现管理,与 Grunt 不同的时,它包含的许多自动化的黑盒操作所以配置起来会简单很多(但遇到问题调试起来就很麻烦),一个典型的配置如下:


module.exports = {//插件项plugins: [commonsPlugin],//页面入口文件配置entry: {index : './src/js/page/index.js'},//入口文件输出配置output: {path: 'dist/js/page',filename: '[name].js'},module: {//加载器配置loaders: [{ test: /\.css$/, loader: 'style-loader!css-loader' },{ test: /\.js$/, loader: 'jsx-loader?harmony' },{ test: /\.scss$/, loader: 'style!css!sass?sourceMap'},{ test: /\.(png|jpg)$/, loader: 'url-loader?limit=8192'}]},//其它解决方案配置resolve: {root: '/Users/Bell/github/flux-example/src', //绝对路径extensions: ['', '.js', '.json', '.scss'],alias: {AppStore : 'js/stores/AppStores.js',ActionType : 'js/actions/ActionType.js',AppAction : 'js/actions/AppAction.js'}}
};

Webpack 的不足:

  1. 上手比较难:官方文档混乱、配置复杂、难以调试(Webpack2 已经好了很多)对于新手而言需要经历踩坑的过程;
  2. 对于 Server 端渲染的多页应用有点力不从心:Webpack 的最初设计就是针对 SPA,所以在处理 Server 端渲染的多页应用时,不管你如何 chunk,总不能真正达到按需加载的地步,往往要去考虑如何提取公共文件才能达到最优状态。

模块化与组件化
提到 Webpack 就不得不说它的模块化加载方式,先来看下传统的模块化方式:


├── scripts/
│    ├── dropdown.js
│    ├── lazyload.js
│    ├── modal.js
│    └── slider.js
├── styles/
│    ├── button.less
│    ├── list.less
│    ├── modal.less
│    └── slider.less

传统的模块化基于单种编程语言,目的是为了解耦和重用,而因为前端本身的特点(需要三种编程语言配合)以及能力限制,所以不能实现跨资源加载也就难以实现组件化。

而 Webpack 打破的这种思维局限,它的 Require anything 的理念在实现模块化的同时也能够很方便实现组件化,借助 Webpack 就可以很轻松的实现这种代码组织结构:

├──components/
│    ├── button/
│    │    ├── button.js
│    │    ├── button.less
│    │    ├── dropdwon.js
│    │    └── icon.png
│    ├── modal/
│    ├── slider/

一旦实现组件化,那么我们的项目开发方式和分工合作方式就可以升级,可以实现分组件并行开发,也可以方便的引用其它项目使用的组件:

项目A

组件开发人员
选项卡小明
资讯列表华生
走马灯诸葛
模态窗口复用

项目B

组件开发人员
选项卡复用
按钮小迪
模态窗口龙辰
上传老马

So,可以说组件化才是目前提升大型项目多人团队合作效率的最佳解决方案!

适用场景:
综上所述,Webpack 特别适合配合 React.js、Vue.js 构建单页面应用以及需要多人合作的大型项目,在规范流程都已约定好的情况下往往能极大的提升开发效率与开发体验。

OK,对于前端工程工具的介绍就到这里,希望能在大家做技术选型的时候给予一定的帮助;接下来还会带来 Gulp、Webpack 在实际工作应用的详细教程。



作者:Bellhe
链接:https://www.jianshu.com/p/3e8941eda2dd
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


http://chatgpt.dhexx.cn/article/XObPsmHx.shtml

相关文章

前端构建工具与应用程序测试

1、前端构建工具 什么是前端构建&#xff1f; 什么是构建工具&#xff1f; 自动构建工具 Npm Scripts&#xff08;推荐&#xff09; Npm Scripts&#xff08;NPM脚本&#xff09;是一个任务执行者。NPM是安装Node时附带的一个包管理器&#xff0c;Npm Script 则是 NPM 内置…

前端构建工具gulp的详细介绍以及使用

什么是 gulp为什么要用 gulp如何使用 gulp Installing Gulp Install the gulp commandInstall gulp in your devDependencies Create a gulpfileTest it out gulp API 什么是 gulp gulp 是一个前端构建工具&#xff0c;它能通过自动执行常见任务&#xff0c;比如编译预处理 CS…

去中心化的前端构建工具 — Vite

为什么要使用Vite 在浏览器中提供ES模块之前&#xff0c;开发人员没有以模块化方式编写JavaScript的本机机制。这就是为什么我们都很熟悉“捆绑”的概念:使用工具来抓取、处理和连接源模块到可以在浏览器中运行的文件中。 随着时间的推移&#xff0c;我们看到了webpack、Roll…

vite 前端构建工具

目录 一、vite 简介二、vite 语法纪要三、用 vite 创建项目1、用 vite 创建一个 react 项目2、用 vite 创建一个 vue3 项目 四、vite 和 webpack 的比较 一、vite 简介 Vite 官方中文文档 vite.config 配置文件 Vite 是一个 web 开发构建工具&#xff0c;由于其原生 ES 模块导入…

前端构建工具(理解+使用)

一、构建工具可以做什么&#xff1f; 安装 vs 做事情 1、安装包工具&#xff1a;例如&#xff1a;npm、Bower&#xff0c;Yeoman可以安装几乎所有的东西。 他们可以安装前端框架&#xff0c;比如Angular.js或者React.js。 他们可以为你的开发环境安装服务器。 他们可以安装…

前端构建工具的未来

本文作者系360奇舞团前端开发工程师 本文为翻译 原文标题&#xff1a;The Future Of Frontend Build Tools 原文作者&#xff1a;Alexander Joseph 原文链接&#xff1a;https://www.smashingmagazine.com/2022/06/future-frontend-build-tools/ 前端构建工具对现代前端开发者的…

对前端构建工具的一些理解

前言 最近有幸在前端团队里面做了一次关于 webpack 的技术分享。在分享的准备过程中&#xff0c;为了能让大家更好的理解 webpack&#xff0c;特意对市面上以前和现在流行的构建工具做了一个梳理总结。在整理和分享的过程中&#xff0c;获益匪浅&#xff0c;对前端构建工具有了…

前端构建工具大盘点:gulp、webpack、vite、rollup、esbuild、snowpack、babel、parcel、swc、tsc

文章目录 背景分类转译器打包器 对比gulp VS webpackBundle vs Bundleless&#xff08;代表就是webpack VS vite&#xff09;其他比较 个人理解总结官网 背景 做前端也有好多年了&#xff0c;从最早的 jQuery 时代到现在的三大框架&#xff0c;这过程中用到了很多构建工具&…

前端程序员常用的9大构建工具

构建工具是一个把源代码生成可执行应用程序的过程自动化的程序(例如Android app生成apk)。构建包括编译、连接跟把代码打包成可用的或可执行的形式。 在小型项目中&#xff0c;开发者往往手动调用构建过程&#xff0c;这样在大型的项目中很不实用&#xff0c;在构建过程中难以跟…

Git入门指南二:初次运行Git前的配置

Git入门指南二:初次运行 Git 前的配置 初次运行 Git 前的配置 Git 提供了一个叫做 git config 的工具&#xff0c;专门用来配置或读取相应的工作环境变量&#xff0c;正是由这些环境变量&#xff0c;决定了 Git 在各个环节的具体工作方式和行为。 这些变量可以存放在以下三个…

Linux下使用Git入门

什么是版本控制 简单理解就是把文件每次的修改都记录下来&#xff0c;包括最初的一个版本。 在gitee上创建一个仓库 这样仓库就创建好了 gitclone 把仓库克隆到本地目录下 先选择一个目录来存放我们的仓库目录 然后把这个仓库的路径给复制上 在对应的目录下输入指令git …

Git入门级教程(轻松上手)

Git入门以及在Idea中集成使用Git 前言&#xff1a;当我们在团队开发的时候&#xff0c;我们需要一个工具来协同进行项目的完成&#xff0c;这个工具就是git。此博客内容是自己学习的笔记&#xff0c;我认为知道这些便可以轻松使用git了。 Git就是一种分布式版本控制系统 1.安装…

Git入门学习教程

Git学习 文章目录 Git学习1.简介2.工作流程图3.安装3.1 常用指令 4.环境配置4.1 查看配置4.2 配置用户名&#xff08;必须&#xff09;和邮箱 5.创建仓库6.基础操作指令6.1 查看状态&#xff08;status&#xff09;6.2 添加工作区到暂存区&#xff08;add&#xff09;6.3 提交暂…

【Git从入门到精通】Git入门

什么是版本控制 版本控制是一套系统&#xff0c;按时间记录某一个或一系列文件的变更&#xff0c;查看以前的特定版本。 使用版本控制系统&#xff0c;你可以将文件或者整个项目恢复到先前的状态&#xff0c;还可以对以前的文件进行对比。 本地版本控制系统 本地版本控制系…

Git入门看这一篇就够了

老规矩&#xff0c;在学习前我们先看一下学习框架&#xff1a; Tip: Git分支内容较多就放在另一篇文章中啦 目录 Git起步——版本控制 版本控制软件 版本控制软件的好处 版本控制软件的分类 Git基础 Git基础 Git中的三个区域 Git中的三种状态 基本的Git工作流程 安装…

Git入门级教程

文章目录 一.Git概述?1.什么是Git?2.通过git我们可以&#xff1a;3.Git工作流程图4.工作区、暂存区、版本库 概念5.Git的下载与安装6.Git代码托管服务 二.Git常用命令1.Git全局设置2.获取Git仓库&#xff1a;4.本地仓库操作常用命令5.远程仓库操作的常用命令5.1配置SSH钥6.分…

Git入门起步

一、关于版本控制 1.1、概念 版本控制软件&#xff1a;是一个用来记录文件变化&#xff0c;以便将来查阅特定版本修订情况的系统&#xff0c;因此有时也叫做“版本控制系统” 通俗的理解&#xff1a;把手工管理文件版本的方式&#xff0c;改为由软件管理文件的版本&#xff1b…

git新手入门教程

git在日常开发是经常用到的工具&#xff0c;也是程序员必备的技能之一。下面是一篇git的新手快速入门。 git的下载地址&#xff1a;https://www.git-scm.com/download/ 上面是一张简易的git流程图&#xff0c;下面讲讲git操作的基本命令行。 git clone $ git clone 地址 …

Git入门到精通全套教程

[声明:此文章为观看尚硅谷系列课程后本人手打整理课件] 第一章 Git概述 git是一个免费&#xff0c;且开源的分布式版本控制系统&#xff0c;可以快速高效地处理从小到大的各种项目 git易于学习&#xff0c;占地面积小&#xff0c;性能极快。它具有廉价的本地库,方便的暂存区域…

git 入门

git入门 一、下载安装 git官网地址Git - Downloads 二、提交仓库 1. 用户配置 $ git config --global user.name "Your Name" $ git config --global user.email "emailexample.com"name与"有空格 2. 创建文件夹,查看当前地址,创建仓库 $ m…