自动化构建工具Gulp

news2024/11/13 8:53:18
第三方模块-Gulp
解释

基于node平台开发的前端构建工具

将机械化操作编写成任务,由一条命令来触发执行,提高开发效率

主要能做什么
  • 项目上线:html、css、js文件的压缩合并
  • 语法转换:es6、less等语言的转化
  • 公共文件抽离
  • 修改文件后浏览器自动刷新
Gulp使用
  1. 下载框架库:npm install gulp
  2. 在根目录下建立gulpfile.js文件中
  3. 建立项目文件夹目录,如:src,dist等
  4. 在gulpfile.js中编写任务
  5. 在命令行工具中执行gulp任务
Gulp中提供的方法
  1. gulp.src():获取任务要处理的文件
  2. gulp.dest():输出文件
  3. gulp.task():建立gulp任务
  4. gulp.watch():监控文件的变化

具体实例,在自己创建的gulpfile.js中写入:

//引用模块
const gulp = require("gulp");
//使用gulp.task建立任务
//1.任务的名称
//2.任务的回调
gulp.task('first',()=>{
	console.log("这是第一次创建任务");
	// gulp.src('./src/122.txt')这个方法获取到文件,经处理输出到gulp.dest('./dist/css.txt')文件下
   // pipe有管道的意思,上一个文件获取到后,通过本方法传送到下一个处理方法
	gulp.src('./src/122.txt').pipe(gulp.dest('./dist/css.txt'))
})

此时不能直接使用node gulpfile.js命令来执行本文件,因为使用node命令会执行整个js文件,但我们只想执行gulp的task任务。因此我们要使用gulpfile提供的命令行工具来执行命令。

首先安装gulp-cli:

// 因为其他项目可以也会用,所以我们添加 -g 全局安装
npm install gulp-cli -g

安装成功后,在gulpfile.js文件目录中执行cmd命令:

# first是我们刚才创建的任务命
gulp first

这时就运行成功了
在这里插入图片描述

Gulp插件

当我们想压缩项目中各种文件时,需要下载和使用gulp中的各种插件

  • gulp-htmlmin - html文件压缩
  • gulp-csso - 压缩css
  • gulp-babel - JavaScript语法转化
  • gulp-less - less语法转化
  • gulp-uglify - 压缩混淆JavaScript
  • gulp-file-include - 公共文件包含
  • browsersync - 浏览器实时同步

插件比较多,现在只列举其中一个,将项目中html代码压缩

先下载相关插件:

npm install gulp-htmlmin

使用:

//引用模块
const htmlmin = require("gulp-htmlmin");
gulp.task("htmlmin",() => {
	gulp.src('./src/*.html')
	.pipe(htmlmin({collapseWhitespace:true}))
	.pipe(gulp.dest('dist'))
})

因为gulp的插件太多了,一个一个演示不现实,如果有不清楚的可以直接查看官网的使用方式:npm | Home (npmjs.com)

抽取公共模块

利用gulp-file-include插件实现

npm install gulp-file-include

先将公共模块抽取出来,然后在需要使用模块的html文件中使用@@include(文件路径)就可以将公共模块重新使用了。

//引用模块
const htmlmin = require("gulp-htmlmin");
//引用模块
const fileinclude = require("gulp-file-include");
gulp.task("htmlmin",() => {
	gulp.src('./src/*.html')
	.pipe(fileinclude())
	.pipe(htmlmin({collapseWhitespace:true}))
	.pipe(gulp.dest('dist'))
})
js中模块的查找规则
一、当模块没有后缀时
require('./find.js')

require('./find')
  • require方法根据模块路径查找模块,如果是完整路径,直接引入模块
  • 如果模块后缀省略了,先找同名的js文件在找同名的js文件夹
  • 如果找到了同名文件夹,找文件夹中的index.js
  • 如果文件夹中没有index.js就去当前文件夹中的package.js文件中查找main选项的入口文件
  • 如果找指定的入口文件不存在或者没有指定入口文件就会报错,模块没有找到
二、当模块没有路径和后缀时
require('find')
  • Node.js会假设他是系统模块
  • Node.js会去node_modules文件夹中
  • 首先看是否有改名字的js文件
  • 在看是否有该名字的文件夹
  • 如果是文件夹看里面是否有index.js
  • 如果没有index.js查看该文件夹中的package.json中的main选项确定模块入口文件
  • 否则找不到报错
创建web服务器
创建web服务器
使用http模块创建网站服务器-app.js
//引入http模块
const http = require("http");
//创建网络服务器
const app = http.createServer();
// 监听一个事件处理函数
// 当客户端有请求信息来是
app.on('request',(req,res)=>{
   // req 保存了客户端请求的信息
   // res 相应的内容
   
   // 向用户响应一个指定的数据
   res.end("<h1>您好,我在呢</h1>")
})
// 设置监听的端口
app.listen(499);
console.log("服务器启动成功");

此时,在目录处打开cmd,输入命令:node app.js

报文

在http请求和响应的过程中传递的数据库就叫做报文,包括要传送的数据和一些附加的信息,并遵守一定的规则

请求方式

GET:请求数据

POST:发送数据

app.on('request',(req,res)=>{
   // 打印客户端请求的方式
   console.log(req.method)
   // 向用户响应一个指定的数据
   res.end("<h1>您好,我在呢</h1>")
})

在浏览器中我们发送数据时一般是post请求,请求数据时为get请求。不过我们可以通过某种方式干扰这些默认请求的方式。

如使用from标签请求、使用ajax请求等

响应

响应码:

  • 200:请求成功
  • 500:服务器错误
  • 404:资源未找到
  • 400:前端请求方式错误

内容类型:

  • text/html
  • text/css
  • application/javascript
  • image/jpeg
  • application/json
//引入http模块
const http = require("http");
//创建网络服务器
const app = http.createServer();
// 监听一个事件处理函数
app.on('request',(req,res)=>{
   // 为响应结果设置状态码
   res.writeHead(200,{
      "content-type":"text/plain;charset=utf8"
   })
   // 如果想让此时的h1标签在浏览器中生效,则将返回结果改变为:content-type:text/html即可
   res.end("<h1>您好,我在呢</h1>")
})
// 设置监听的端口
app.listen(499);
console.log("服务器启动成功");
获取请求参数

例如请求的地址为:http://127.0.0.1:80/list?id=1

//引入http模块
const http = require("http");
// 用户处理url地址
const url = require("url")
//创建网络服务器
const app = http.createServer();
// 监听一个事件处理函数
app.on('request',(req,res)=>{
   console.log(req.url,'请求的地址')  // list?id=1
   // url.parse(url地址,flag标识)
   // @param flag 将查询参数解析成对象,如果不传将解析成字符串格式,使用不方便
   let parseUrl= url.parse(req.url,true)
   console.log(parseUrl.query) // {id:1}
   if(parseUrl.pathname == "/index"){
      res.end("<h1>欢迎来到首页</h1>")
   }else{
      res.end("<h1>你好啊</h1>")
   }
})
// 设置监听的端口
app.listen(499);
console.log("服务器启动成功");
事件-
  • data: 当请求参数传递时触发data事件

  • end: 当参数传递完成时触发end事件

  • querystring: 当解析参数时使用该模块

querystring和url的区别:url是用来处理请求地址的,如:find?id=1,querystring是用来处理参数的,如:id=1。

当使用post请求时需要将参数先取到,然后执行下面的操作

如请求的链接是:http://localhost/find?id=1&userId=2

//引入http模块
const http = require("http");
// 处理请求参数模块
const querystring = require("querystring")

//创建网络服务器
const app = http.createServer();
// 监听一个事件处理函数
app.on('request',(req,res)=>{
   // data 当请求参数传递时触发data事件
   // ennd 当参数传递完成时触发end事件
   let params = ''
   req.on('data',param=>{
      params += param
   })
   req.on('end',param=>{
      console.log(params) // id=1&userId=2
      // 注意:url模块是处理请求地址的,但我们现在想处理请求参数,所以要使用querystring模块
      console.log(querystring.parse(params)) // {id:1,userId:2}
   })
})
// 设置监听的端口
app.listen(499);
console.log("服务器启动成功");
路由

路由是指客户端请求地址与服务器端程序代码的映射关系。

通过输入http://localhost/list.html获取http://localhost/public/list.html下的静态资源

//引入http模块
const http = require("http");
const url = require('url')
const path = require('path')
const fs = require('fs')
//创建网络服务器
const app = http.createServer();
// 监听一个事件处理函数
app.on('request',(req,res)=>{
   let pathname = url.parse(req.url).pathname;
   // 得到静态资源的绝对路径
   let respath = path.join(__dirname,'public',pathname);
   console.log(respath)
   // 读取文件内容
   fs.readFile(respath,(err,result)=>{
      if(err==null){
         res.writeHead(404,{
            "content-type":"text/html;charset=utf8"
         })
         res.end("文件不存在") 
      }else{
         res.writeHead(200,{
            "content-type":"text/html;charset=utf8"
         })
         res.end(result)
      }
   })
})
// 设置监听的端口
app.listen(499);
console.log("服务器启动成功");

需要注意:注意返回文本的格式编码改为utf8。之所以有时候不会乱码,是因为当我们在html页面执行时,页面的头部标签处已经指定好编码格式了,所以我们不需要再服务端指定编码格式。

mime模块

此模块可以根据请求路径将返回类型输出。使用方式如下:

const mime = require("mime");
const path = require("path")
// 路径地址
let basePath = '/default.html'
// 绝对路径
let realPath = path.join(__dirname,'public',basePath);
// mime相关方法
console.log(mime.getType(realPath)) // text/html
同步API/异步API
同步

代码从上到下依次执行,只有上行代码执行完后才能执行下方代码,如:

参考:Promise

异步

代码的执行不会因为上方代码执行缓慢而影响下方代码的执行,如:

console.log("before")
setTimeout(()=>{
   console.log('time')
},100)
console.log('after')

// 代码运行
before
after
time
全局对象

在浏览器中全局对象是window,在Node中全局对象是global。

在使用中可以向window中一样,将global省略的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075690.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

替代液压比例放大器首选

比例阀放大器的选用应考虑诸多因素&#xff0c;如系统需求、放大器的兼容性、调节性、附加功能、安全特性、供应商支持和环境适应性等。 系统性能要求明确 压力与流量: 根据液压系统所需的压力和流量来确定放大器的性能指标&#xff0c;以确保比例阀能得到充分的功率支持。 …

2024/8/26 英语每日一段

Apple and Google have had nearly unchecked power over mobile apps in ways that raise prices for some of what you buy, block you from trying clever ideas, push app makers to do scuzzy things to make money, and impose Apple’s and Google’s wishes on all us.…

如何用Java SpringBoot+Vue开发高效OA办公管理系统

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

三品船舶PLM解决方案详情 三品PLM软件在船舶制造行业应用优势

自2024年起&#xff0c;船舶行业PLM&#xff08;产品全生命周期管理&#xff09;技术步入关键发展阶段。国产化工业软件领域积极倡导生态合作&#xff0c;推广统一技术底座下的合作开发模式&#xff0c;整合国内外成熟的工业软件技术与应用资源&#xff0c;旨在全面提升国内船舶…

【Bigtop】利用Bigtop3.2.0编译大数据组件RPM包

利用Bigtop3.2.0编译大数据组件RPM包 前言正文Mvn本地目录的修改FlinkKafkagrgit版本手动准备gradle的文件 前言 原文参考&#xff1a;Bigtop 从0开始 参考了上述的博文自己尝试了编译组件&#xff0c;过程还是遇到很多问题&#xff0c;一一记录&#xff0c;方便后人。 Bigt…

【方案】智慧排水系统解决方案(doc原件)

一、项目建设目标 二、项目主要内容 三、项目建设方案 1.GIS管理子系统 &#xff08;1&#xff09; 数据管理和访问 &#xff08;2&#xff09; 地图操作功能 &#xff08;3&#xff09; 地图查询定位功能 &#xff08;4&#xff09; 其他功能 2.工程管理子系统 &#xff08;1&…

免费分享!算法备案流程以及所需资料

免费分享&#xff01;算法备案流程以及所需资料 在国内&#xff0c;随着《生成式人工智能服务管理暂行办法》的出台&#xff0c;这一规定明确指出&#xff0c;任何面向中国公众提供具备舆论影响力或社会动员潜力的生成式AI服务&#xff0c;都必须经过严格的算法备案程序。 这就…

有关于算法备案的五大误区

有关于算法备案的五大误区 在这个数据为王的时代&#xff0c;算法已然成为推动社会前进的隐形巨轮。从搜索框中的每一次点击&#xff0c;到购物车里的每一件商品推荐&#xff0c;再到朋友圈里刷屏的动态&#xff0c;算法的身影无处不在&#xff0c;悄无声息地编织着我们的数字生…

云HIS系统,利用云计算平台的技术优势,建立统一的健康档案和电子存储平台,实现医疗数据共享与交换

云HIS系统源码&#xff0c;医院信息管理系统源码&#xff0c;医疗云HIS源码 基于云计算技术的B/S架构的HIS系统&#xff0c;为医疗机构提供标准化的、信息化的、可共享的医疗信息管理系统&#xff0c;实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。系统利用云计…

项目经理都在用的五款项目管理工具(建议收藏)

在项目管理中&#xff0c;选择合适的工具对于确保项目成功至关重要。 以下是几款备受项目经理青睐的项目管理软件&#xff1a; 1、进度猫 进度猫是一款基于云端的项目管理工具&#xff0c;以其轻量级、直观和易操作的特点受到项目经理的青睐。它提供了丰富的功能和灵活的操…

如何安装和高级 AMP for WP

当 WordPress 是支持 AMP 的 WEB 站点时&#xff0c;主要通过两个插件支持 AMP。 一个是AMP插件。 这个插件也参与谷歌的开发&#xff0c;并被确认为AMP项目的官方插件。 我最初也安装了这个AMP插件&#xff0c;但我不知道是否能够共存的常规网站和AMP兼容网站&#xff0c;很难…

这只猴子一夜赚了15亿?

通过《黑神话》思考低代码平台的发展 《黑神话》的设计分析 《黑神话》作为一款大型3A游戏&#xff0c;其优化工作主要聚焦于提升游戏性能、增强画面表现以及提升玩家体验。这包括但不限于以下几个方面&#xff1a; 技术突破&#xff1a;游戏采用了前沿的技术手段&#xff0…

AppInventor2 文本输入框(TextBox)已支持文本变更事件,非常便于实时处理输入的内容

自 v2.70开始&#xff0c;文本输入框加入了文本变更事件&#xff1a; 效果如下&#xff1a; 文本事件.gif (99.17 KB, 下载次数: 3) 下载附件 昨天 19:57 上传 同理&#xff0c;密码输入框组件也是一样的。 原文&#xff1a;AppInventor2 文本输入框&#xff08;TextBox&a…

用Python实现9大回归算法详解——08. 随机森林回归算法

1. 随机森林回归的基本概念 随机森林回归&#xff08;Random Forest Regression&#xff09;是一种集成学习方法&#xff0c;基于多棵决策树的组合来进行预测。它通过引入随机性来构建多棵独立的决策树&#xff0c;并将这些树的预测结果进行平均&#xff0c;从而提升模型的泛化…

streeapptest 工具编译看 + 测试rk3568

首先来了解一下 stressappteset 网上的资料 压力测试不就是 内存的接口测试吗&#xff1f; 网上找了些资料&#xff0c;基本没有这个工具对于 磁盘网络的测试。 我的理解&#xff0c;压力测试应该指的就是 CPU内存的测试吧。 然后是 关于这个 软件的编译。 首先是下载 git c…

避雷!Springer、Cell等出版社旗下17本SCI/SSCI被剔除,含3本on hold期刊!

2024年8月19日&#xff0c;科睿唯安本年度第八次更新Web of Science核心期刊目录。 图片来源&#xff1a;科睿唯安 与上次更新&#xff08;2024年7月&#xff09;相比&#xff0c;此次更新后的SCIE、SSCI期刊目录共17本期刊发生变动&#xff0c;详情如下&#xff1a; 图片来源…

用ComfyUI打造一键换装神器,轻松搭建本地工作流!

前言 最近快手推出了一个一键换装的模型&#xff0c;还原度还挺高的&#xff0c;效果也很不错&#xff0c;于是自己上手用ComfyUI也搭建了一套这样的工作流&#xff0c;练练手&#xff0c;搭建出来之后发现效果也还挺不错的&#xff0c;分享给大家&#xff1a; 我们先来看看快…

基于插件机制、SPI与事件驱动的系统设计

时间&#xff1a;2024年08月26日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址:https://xima.tv/1_F4V6FW?_sonic0 希望大家帮个忙&#xff01;如果大家有工作机会&#xff0c;希望帮小蒋内推一下&#xff0c;小蒋希…

【html+css 绚丽Loading】 000018 五行伸缩剑

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽Loading&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495…

苹果手机忘记密码怎么办?解锁技巧分享

在数字时代&#xff0c;手机几乎成了我们生活的必需品&#xff0c;尤其是苹果手机&#xff0c;以其卓越的性能和流畅的体验赢得了众多用户的喜爱。然而&#xff0c;偶尔的疏忽可能导致我们忘记手机的锁屏密码&#xff0c;这时该怎么办呢&#xff1f;别担心&#xff0c;本文将为…