gulp安装教程(简单的前端自动化教程)

简介: gulp安装教程(简单的前端自动化教程)

什么是gulp?


是一个基于 Node.js 流、Javascript语法的快速构建前端项目并减少频繁的 IO 操作的自动化工具。


优点:


易于使用

通过代码优于配置的策略,Gulp 让简单的任务简单,复杂的任务可管理。

构建快速

利用 Node.js 流的威力,你可以快速构建项目并减少频繁的 IO 操作。

插件高质

Gulp 严格的插件指南确保插件如你期望的那样简洁高质得工作。

易于学习

通过最少的 API,掌握 Gulp 毫不费力,构建工作尽在掌握:如同一系列流管道。

gulp API

参见 http://www.gulpjs.com.cn/docs/api/


gulp构建


1. 准备工作


>安装node客户端

下载网址https://nodejs.org/en/download/

>全局安装npm

npm 是 nodejs 的包管理和分发工具,全局安装 npm install -g

>全局安装gulp

npm install gulp --save-dev

save-dev 这个参数会将插件信息自动更新到 package.json 里,其中的 devDependencies 属性会随插件依赖的安装卸载而改变


2 .目录结构


- - gulp

- - - - - -dist  //生产目录

- - - - - -src  //开发目录

- - - - - - - - - js

- - - - - - - - - css

- - - - - - - - - html

- - - - - -node_modules

- - - - - -gulpfile.js

- - - - - -package.json


3 .关于package.json


82d6ab43895e84ed43f6875056a0250c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

mkdir gulp

cd gulp

在gulp目录下执行 npm init 生成package.json文件

安装相关的依赖包

npm install gulp-uglify gulp-rename gulp-concat gulp-notify .. --save-dev

另外:对于完整的 package.json (比如github上淘下来的项目), 只需对整个项目执行 npm install 即可安装 package.json 文件中声明的所有插件模块


4 .实现一个本地服务器


在gulpfile.js文件里,添加依赖包

1e4ae20a83e5117c949c2012cfe6f53b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

定义根目录变量

3c2271eec929f500c98ecd3c91972565_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

定义一个task,端口为8888,根目录为开发目录

fb7deaab3dc95578e512ee531fb8bf72_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

在node命令窗口里执行

gulp server

出现这些说明成功了,这个时候在浏览器里输入localhost:8888即可看到本地开发目录下的文件夹。这样一来就相当于我们传统使用的tomcat服务启动,就可以进行下一部的开发工作了。


5. 资源实时更新


开发中我们经常需要按f5刷新页面开效果,那么有了livereload这个插件后,你可以彻底解放你的f5键了。

引入两个依赖

425ba6a8a42e1a0fe9559ea8149e0ebc_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

创建watch task

watch()是gulp的核心API,这里实时监听开发目录下的html文件,同时依赖reload-dev任务,reload-dev里面实现了connet插件的reload()方法,注意:server一定要设置激活 livereload: true

f4bfd5748221ca7d523f99018ecc8fb2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg因为gulp task执行的时候并不一定是按顺序的,所以新建一个任务,通过sunSequence插件同步执行上面这两个任务

66ba0c6690b7fb919eadcd3e49a51c0e_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

node 控制台执行 gulp live,这个时候去编辑对应的html,按下保存键,即可看到服务reload的日志

4f5a8a22612dfcde40e38fef559b4d48_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

livereload实时刷新效果图

8e58f03cf693968308222d986fdbc2d8_0_wx_fmt=gif&wxfrom=5&wx_lazy=1.gif


6. 压缩js


同样的,也是新建一个task,.src()方法里输入开发环境的目录文件,首先通过.pipe()接口执行stripDebug()方法去掉所有的调试信息,如果uglify()方法里没有带其他参数,默认是不保留注释的,接着用rename插件重命名一下文件,最后通过.dest()接口输出到生成目录下。

3818b17d1067e110ac05b7abf53eab8d_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg

同样的在node命令窗口里执行

ded44e90c55a6452ff218b4848b6fbef_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

gulp minjs

在dist目录就可以看到多了一个js目录,里面的js全部已被压缩,并且重命名为xx.min.js


7. 压缩css


和压缩js一样

d6aff98d780e5bca6a4998d086457afa_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg

node命令窗口里执行

gulp mincss

在dist目录就可以看到多了一个css目录,里面的css全部已被压缩,并且重命名为xx.min.css


8. 合并js


一个页面通常有多个js或者引入,当上产生环境的时候为了减少网络请求,最好先将资源合并一下,gulp方便快捷的帮助我们完成了这个步骤。

可以看到,合并js是用的concat这个接口,当然首先需要引入gulp-concat

aade1f0f251fd450a12075bb20bc7c49_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

task如下,

d65696d9f978d5e9ac2abc6a382e21a1_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg

node命令窗口里执行

gulp concatjs

最终在生产目录下生成了一个concat文件,里面包含了一个合并的main.js

同样的合并css步骤一样,这里不一一叙述。


9. 静态资源添加版本号


前端静态资源缓存一直以来是一个梗,最简单的方式是我们手动去资源后面添加版本号,如果资源一多,那真是个噩梦..  幸好有gulp-rev

首先添加依赖包

022433a81af71c0039000c971b7fcaf7_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

建立两个task

400f0ac3420629250a80c1ddc78ab3cf_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg

node窗口里执行gulp revCss 、gulp revJs后,对应的css、js目录下分别生成了rev-manifest.json文件。

revCollector插件是根据rev-manifest.json 里面的键值对,再对html进行md5比较,最终将有变化的html进行版本更新

建立处理html task

3cc4e6c6d6620de48d30e044cf5ddc95_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg

运行gulp revHtml后,会发现生产目录下的html文件引用的js/css自动添加的版本后缀

当然,后续更改了相关js/css后,需要再执行revCss和revJs,所以这里也通过一个集合task有序的执行上面三个任务

3cd7fce4cfc6230ebdf7e022e5e5835c_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.jpg

效果图

eceeeb3d315dec5008cf8a63a0b11d9c_0_wx_fmt=gif&wxfrom=5&wx_lazy=1.gif

有一点需要注意,我们通常期望添加的版本号是这样子

80c48bdd0cb5188b8f05ad0308623c2b_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png

可是gulp-rev默认类似是这样 common911965ed05.js,是再重新生成了一个js文件,随着越来越多的版本更新,文件越来越多,显然不合适,那么为了达到期望的效果,需要对其源码做如下相关的修改:

打开node_modules\gulp-rev\index.js 第144行
 manifest[originalFile] = revisionedFile; 更新为: manifest[originalFile] = originalFile + '?v=' + file.revHash;
打开nodemodules\gulp-rev\nodemodules\rev-path\index.js 10行
 return filename + '-' + hash + ext; 更新为: return filename + ext;
打开node_modules\gulp-rev-collector\index.js 31行
 if ( !_.isString(json[key]) || path.basename(json[key]).replace(new RegExp( opts.revSuffix ), '' ) !== path.basename(key) ) { 更新为: if ( !_.isString(json[key]) || path.basename(json[key]).split('?')[0] !== path.basename(key) ) {


4028d8d3d77c428311bc1b674243afb2_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


目录
相关文章
|
2天前
|
前端开发 应用服务中间件 nginx
docker安装nginx,前端项目运行
通过上述步骤,你可以轻松地在Docker中部署Nginx并运行前端项目。这种方法不仅简化了部署流程,还确保了环境的一致性,提高了开发和运维的效率。确保按步骤操作,并根据项目的具体需求进行相应的配置调整。
38 25
|
1月前
|
存储 人工智能 自然语言处理
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
ChatMCP 是一款基于模型上下文协议(MCP)的 AI 聊天客户端,支持多语言和自动化安装。它能够与多种大型语言模型(LLM)如 OpenAI、Claude 和 OLLama 等进行交互,具备自动化安装 MCP 服务器、SSE 传输支持、自动选择服务器、聊天记录管理等功能。
195 15
ChatMCP:基于 MCP 协议开发的 AI 聊天客户端,支持多语言和自动化安装 MCP 服务器
|
19天前
|
开发框架 小程序 前端开发
圈子社交app前端+后端源码,uniapp社交兴趣圈子开发,框架php圈子小程序安装搭建
本文介绍了圈子社交APP的源码获取、分析与定制,PHP实现的圈子框架设计及代码编写,以及圈子小程序的安装搭建。涵盖环境配置、数据库设计、前后端开发与接口对接等内容,确保平台的安全性、性能和功能完整性。通过详细指导,帮助开发者快速搭建稳定可靠的圈子社交平台。
144 18
|
2月前
|
关系型数据库 MySQL Java
【Docker最新版教程】一文带你快速入门Docker常见用法,实现容器编排和自动化部署上线项目
Docker快速入门到项目部署,MySQL部署+Nginx部署+docker自定义镜像+docker网络+DockerCompose项目实战一文搞定!
|
3月前
|
JavaScript 前端开发 Docker
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
在使用 Deno 构建项目时,生成的可执行文件体积较大,通常接近 100 MB,而 Node.js 构建的项目体积则要小得多。这是由于 Deno 包含了完整的 V8 引擎和运行时,使其能够在目标设备上独立运行,无需额外安装依赖。尽管体积较大,但 Deno 提供了更好的安全性和部署便利性。通过裁剪功能、使用压缩工具等方法,可以优化可执行文件的体积。
199 3
前端全栈之路Deno篇(二):几行代码打包后接近100M?别慌,带你掌握Deno2.0的安装到项目构建全流程、剖析构建物并了解其好处
|
3月前
|
JavaScript 前端开发 Docker
前端的全栈之路Meteor篇(一):开发环境的搭建 -全局安装或使用容器镜像
本文介绍了如何搭建 Meteor 开发环境,包括全局安装 Meteor 工具和使用 Docker 镜像两种方法,以及创建和运行一个简单的 Meteor 项目的基本步骤。 Meteor 是一个全栈 JavaScript 框架,适用于构建实时 Web 应用程序。文章还提供了遇到问题时的解决建议和调试技巧。
150 3
|
3月前
|
前端开发 JavaScript 应用服务中间件
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
本文是一篇详细的教程,介绍了如何在Linux系统上安装和配置nginx,以及如何将打包好的前端项目(如Vue或React)上传和部署到服务器上,包括了常见的错误处理方法。
1092 0
linux安装nginx和前端部署vue项目(实际测试react项目也可以)
|
3月前
|
缓存 JavaScript 前端开发
拿下奇怪的前端报错(三):npm install卡住了一个钟- 从原理搞定安装的全链路问题
本文详细分析了 `npm install` 过程中可能出现的卡顿问题及解决方法,包括网络问题、Node.js 版本不兼容、缓存问题、权限问题、包冲突、过时的 npm 版本、系统资源不足和脚本问题等,并提供了相应的解决策略。同时,还介绍了开启全部日志、使用替代工具和使用 Docker 提供 Node 环境等其他处理方法。
2335 0
|
3月前
|
JavaScript 前端开发 搜索推荐
Gulp:构建自动化与任务管理的强大工具
【10月更文挑战第13天】Gulp:构建自动化与任务管理的强大工具
106 0
|
3月前
|
Web App开发 Java 测试技术
一、自动化:web自动化。Selenium 入门指南:从安装到实践
一、自动化:web自动化。Selenium 入门指南:从安装到实践
69 0

热门文章

最新文章