第21节课:前端构建工具—自动化与模块化的利器
目录
- 前端构建工具的重要性
- 任务运行器:Gulp与Grunt
- Gulp
- Gulp的工作原理
- 安装与使用Gulp
- Grunt
- Grunt的工作原理
- 安装与使用Grunt
- 模块打包器:Webpack
- Webpack简介
- Webpack的工作原理
- 安装与使用Webpack
- 实践:使用Gulp和Webpack构建前端项目
- 示例:使用Gulp进行自动化任务
- 示例:使用Webpack打包模块
- 结语
随着前端项目的复杂度不断增加,手动处理各种任务变得既耗时又容易出错。前端构建工具的出现,极大地提高了开发效率和代码质量。本节课将介绍前端构建工具中的任务运行器(如Gulp、Grunt)和模块打包器(如Webpack),探讨它们的作用、特点和使用方法。
前端构建工具的重要性
前端构建工具可以帮助开发者自动化各种重复性任务,如文件压缩、代码合并、图像优化、自动刷新等。此外,模块打包器还能帮助我们管理复杂的依赖关系,使代码更加模块化和可维护。
任务运行器:Gulp与Grunt
Gulp
Gulp是一个基于流的自动化构建工具,它通过代码配置任务,使得任务的定义和执行更加灵活和高效。
Gulp的工作原理
Gulp使用Node.js的流(Streams)来处理文件,这意味着文件在磁盘上的读写操作可以被流式处理,从而提高性能。
安装与使用Gulp
-
安装Gulp:通过npm安装Gulp。
bash复制
npm install --global gulp-cli npm install --save-dev gulp -
创建
gulpfile.js:在项目根目录下创建gulpfile.js,并定义任务。JavaScript复制
const gulp = require('gulp');function clean() {return gulp.src('dist', { read: false }).pipe(clean()); }exports.clean = clean; -
运行任务:在命令行中运行Gulp任务。
bash复制
gulp clean
Grunt
Grunt是另一个流行的前端构建工具,它通过配置文件来定义任务。
Grunt的工作原理
Grunt使用配置文件(Gruntfile.js)来定义任务,每个任务都有自己的配置和执行逻辑。
安装与使用Grunt
-
安装Grunt:通过npm安装Grunt。
bash复制
npm install --global grunt-cli npm install --save-dev grunt -
创建
Gruntfile.js:在项目根目录下创建Gruntfile.js,并定义任务。JavaScript复制
module.exports = function(grunt) {grunt.initConfig({pkg: grunt.file.readJSON('package.json'),uglify: {options: {banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n'},build: {src: 'src/<%= pkg.name %>.js',dest: 'build/<%= pkg.name %>.min.js'}}});grunt.loadNpmTasks('grunt-contrib-uglify');grunt.registerTask('default', ['uglify']); }; -
运行任务:在命令行中运行Grunt任务。
bash复制
grunt
模块打包器:Webpack
Webpack简介
Webpack是一个模块打包器(Module Bundler),它可以将项目中的所有依赖项(如JavaScript、CSS、图片等)打包成一个或多个bundle。
Webpack的工作原理
Webpack通过分析项目中的模块依赖关系,将它们打包成一个或多个bundle。它使用loader来处理不同类型的文件,并使用plugin来扩展其功能。
安装与使用Webpack
-
安装Webpack:通过npm安装Webpack。
bash复制
npm install --save-dev webpack webpack-cli -
创建
webpack.config.js:在项目根目录下创建webpack.config.js,并配置Webpack。JavaScript复制
const path = require('path');module.exports = {entry: './src/index.js',output: {filename: 'bundle.js',path: path.resolve(__dirname, 'dist')},module: {rules: [{test: /\.css$/,use: ['style-loader', 'css-loader']}]} }; -
运行Webpack:在命令行中运行Webpack。
bash复制
npx webpack --config webpack.config.js
实践:使用Gulp和Webpack构建前端项目
示例:使用Gulp进行自动化任务
HTML复制
<!DOCTYPE html>
<html>
<head><title>Gulp自动化任务示例</title>
</head>
<body><h1>欢迎使用Gulp</h1><p>这是一个简单的Gulp自动化任务示例。</p>
</body>
</html>
示例:使用Webpack打包模块
JavaScript复制
// src/index.js
import './style.css';console.log('Hello, Webpack!');
css复制
/* src/style.css */
body {background-color: #f0f0f0;
}
结语
前端构建工具如Gulp、Grunt和Webpack,为前端开发带来了极大的便利。通过自动化任务和模块打包,开发者可以更加专注于代码本身,而不是繁琐的构建过程。掌握这些工具,将使你在前端开发领域更加得心应手。继续探索这些工具的高级功能和最佳实践,你将能够构建出更加高效和可维护的前端项目。
相关文章:
第21节课:前端构建工具—自动化与模块化的利器
目录 前端构建工具的重要性任务运行器:Gulp与GruntGulpGulp的工作原理安装与使用Gulp GruntGrunt的工作原理安装与使用Grunt 模块打包器:WebpackWebpack简介Webpack的工作原理安装与使用Webpack 实践:使用Gulp和Webpack构建前端项目示例&…...
企业SaaS(软件即服务)行业中AARRR
获取(Acquisition) 通过各种渠道吸引用户。 社交媒体广告:Facebook、Instagram等平台的广告。 内容营销:通过博客、视频等吸引用户。 SEO优化:提高网站在搜索引擎中的排名。 合作营销:与其他企业合作进行交…...
为什么要学习rust
内存管理:对于我来说,我就喜欢它的内存管理。我做了一个webapi,取100万行数据,导出到xlsx,再把这个xlsx文件发送给前端。分别用了java、c#、go和rust进行了相同的操作。只有rust做到了,启动时8MB内存&#…...
观察者模式和订阅发布模式的关系
有人把观察者模式等同于发布订阅模式,也有人认为这两种模式存在差异,本质上就是调度的方法不同。 发布订阅模式: 观察者模式: 相比较,发布订阅将发布者和观察者之间解耦。(发布订阅有调度中心处理)...
基于STM32的智能温控花盆设计
目录 引言系统设计 硬件设计软件设计 系统功能模块 空气质量传感器模块数据处理与分析模块实时显示与用户交互模块报警与提示模块远程监控与数据上传模块 控制算法 空气质量数据处理与分析算法异常检测与报警算法数据上传与历史数据回溯算法 代码实现 空气质量检测与数据处理代…...
OpenAI-Edge-TTS:本地化 OpenAI 兼容的文本转语音 API,免费高效!
文本转语音(TTS)技术已经成为人工智能领域的重要一环,无论是语音助手、教育内容生成,还是音频文章创作,TTS 工具都能显著提高效率。今天要为大家介绍的是 OpenAI-Edge-TTS,一款基于 Microsoft Edge 在线文本…...
P4681 [THUSC 2015] 平方运算 Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an) 和常数 p p p ,有 m m m 个操作,分以下两种: modify ( l , r ) \operatorname{modify}(l,r) modify(l,r):对每个 i ∈ [ …...
【apt源】RK3588 平台ubuntu20.04更换apt源
RK3588芯片使用的是aarch64架构,因此在Ubuntu 20.04上更换apt源时需要使用针对aarch64架构的源地址。以下是针对RK3588芯片在Ubuntu 20.04上更换apt源到清华源的正确步骤: 步骤一:打开终端 在Ubuntu 20.04中,按下Ctrl Alt T打…...
Angular 2 表单深度解析
Angular 2 表单深度解析 引言 Angular 2作为现代前端开发的框架之一,以其灵活性和强大的功能赢得了众多开发者的青睐。在Angular 2中,表单处理是其中一个重要且复杂的部分。本文将深入解析Angular 2的表单,从基础知识到高级应用,旨在帮助开发者更好地理解和运用Angular 2…...
PHP 7 新特性
PHP 7 新特性 引言 PHP 作为一种广泛使用的服务器端脚本语言,自1995年诞生以来,已经经历了多个版本的迭代。PHP 7 是 PHP 的发展历程中的一个重要里程碑,它带来了许多新特性和改进,旨在提高性能、增强安全性和简化开发过程。本文将详细介绍 PHP 7 的新特性,帮助开发者更…...
vim如何解决‘’文件非法关闭后,遗留交换文件‘’的问题
过程描述: 由于我修改文件时(一定得修改了文件,不做任何修改不会产生这个问题)的非法关闭,比如直接关闭虚拟机,或者直接断开远程工具的远程连接,产生了以下遗留交换文件的问题: 点击…...
【练习】树形dp
G. Group Homework time limit per test: 3 s memory limit per test: 512 MB input: standard input output: standard output No, we don’t want group homework. It’s the place where KaTeX parse error: Expected EOF, got & at position 7: 1 1 &̲lt; 1 …...
Mybatis是如何进行分页的?
大家好,我是锋哥。今天分享关于【Mybatis是如何进行分页的?】面试题。希望对大家有帮助; Mybatis是如何进行分页的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MyBatis 实现分页的方式有很多种,最常见…...
【新春特辑】2025年春节技术展望:蛇年里的科技创新与趋势预测
🔥【新春特辑】2025年春节技术展望:蛇年里的科技创新与趋势预测 📅 发布日期:2025年01月29日(大年初一) 在这个辞旧迎新的美好时刻,我们迎来了充满希望的2025年,也是十二生肖中的蛇…...
论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(五)
Understanding Diffusion Models: A Unified Perspective(五) 文章概括基于得分的生成模型(Score-based Generative Models) 文章概括 引用: article{luo2022understanding,title{Understanding diffusion models: A…...
C++并发:C++内存模型和原子操作
C11引入了新的线程感知内存模型。内存模型精确定义了基础构建单元应当如何被运转。 1 内存模型基础 内存模型牵涉两个方面:基本结构和并发。 基本结构关系到整个程序在内存中的布局。 1.1 对象和内存区域 C的数据包括: 内建基本类型:int&…...
JavaScript函数中this的指向
总结:谁调用我,我就指向谁(es6箭头函数不算) 一、ES6之前 每一个函数内部都有一个关键字是 this ,可以直接使用 重点: 函数内部的 this 只和函数的调用方式有关系,和函数的定义方式没有关系 …...
【java学习笔记】@Autowired注解 使用方法和作用 | 配合@Component注解使用 | IOC控制反转
原本在类中,要用什么对象,就直接new一个对象。这种原始的方式 是由应用本身去控制实例的。 用了Autowired注解后,就相当于把实例(对象)的控制权 交给外部容器来统一管理(降低耦合)。(…...
数论问题76一一容斥原理
容斥原理是一种计数方法,用于计算多个集合的并集中元素的个数,以避免重复计算。以下是其基本内容及相关公式: 两个集合的容斥原理 若有集合A和集合B,那么A与B的并集中元素的个数等于A集合元素个数加上B集合元素个数,再…...
python-leetcode-从中序与后序遍历序列构造二叉树
106. 从中序与后序遍历序列构造二叉树 - 力扣(LeetCode) # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right r…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
