一、Gulp的介绍及安装
Gulp是基于node平台开发的前端工具
Gulp可以处理日常工作流产生的任务(作用):
项目上线时对HTML、CSS、JavaScript文件合并、压缩;
将ES6语法转换为ES5语法以便代码在较旧的浏览器中运行;
Gulp提供的方法
gulp.src( )——获取任务要处理的文件
![](https://i-blog.csdnimg.cn/blog_migrate/6da3f1547964d53ac9994c8aa4696825.png)
gulp.dest( )——输出文件
![](https://i-blog.csdnimg.cn/blog_migrate/e733cd50202b69addfbb127171162964.png)
gulp.task( )——建立gulp任务
![](https://i-blog.csdnimg.cn/blog_migrate/e912e183b97fcdc3ac855a0ec28bbbaf.png)
gulp.watch( )——监控文件的变化
![](https://i-blog.csdnimg.cn/blog_migrate/6ef52b5f7b5e8f7d7f483cdefec36421.png)
Gulp工具的安装
(1)全局安装gulp-cli:npm install gulp-cli@2.3.0 -g
![](https://i-blog.csdnimg.cn/blog_migrate/3bcf2ab56ff0ba4003e807add95777cc.png)
(2)在项目中安装gulp:npm init
npm install gulp@4.0.2 --save-dev
![](https://i-blog.csdnimg.cn/blog_migrate/fb70334c5a5ddeb0af2a64e459916b85.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e590743e8022ea1658803ab43ea80046.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ec1f33f5594fa80b40881b575c7b274a.png)
(3)构建项目
![](https://i-blog.csdnimg.cn/blog_migrate/344a1542b7ffe3f2c4d99726cfba4ec1.png)
二、压缩并抽取HTML中的公共代码——html
安装插件
npm install gulp-htmlmin
npm install gulp-file-include
引入模块
// 引入htmlmin插件
const htmlmin = require('gulp-htmlmin')
// 引入gulp-file-include
const fileInclude = require('gulp-file-include')
建立任务
gulp.task('htmlmin', callback => {
gulp.src('./src/*.html')
.pipe(fileInclude())
.pipe(htmlmin({
collapseWhitespace: true
}))
.pipe(gulp.dest('./dist'))
callback();
})
抽取公共部分代码
先把头部公共部分的代码剪切放在common文件夹下面的header.html文件中
@@include()语法是由gulp-file-include插件提供的,小括号中是代码片段的路径以及文件的名字。
在原文件中(article.html)使用@@include('./common/header.html')()里面存放路径
![](https://i-blog.csdnimg.cn/blog_migrate/fa11e01d556767a4e3f7e858b45c3525.png)
执行任务
gulp htmlmin
代码截图如下:
![](https://i-blog.csdnimg.cn/blog_migrate/9f14919913fa2f6be87c5fd4658e33fc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/598b500f75c0610512da246f8d79f637.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2837cf9d5546aa926db656837b33bc18.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4261e78b1ec309175555a64765adabc6.png)
三、压缩并转换Less语法——css
安装插件
//less转换
npm install gulp-less
//css压缩
npm install gulp-csso
引入模块
// 引入gulp-less插件
const less = require('gulp-less')
// 引入gulp-csso插件
const cssmin = require('gulp-csso')
在css文件夹下面建.less后缀的文件
建立任务
gulp.task('cssmin', callback => {
gulp.src(['./src/*.css', './src/css/*.less'])
.pipe(less())
.pipe(cssmin())
.pipe(gulp.dest('./dist/css'))
callback();
})
执行任务
gulp cssmin
代码截图如下:
![](https://i-blog.csdnimg.cn/blog_migrate/e94c5f2b171f67ea52372f796c979e1d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/81e63a853836a32e2945b06687a29310.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b7e28231580b332f3bb718403113df92.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6d9d057787eb1820cbce547aba1e1b86.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7c977d7954be90b994b135721930457a.png)
四、压缩并转换ES6语法——js
安装插件
npm install gulp-uglify
npm install gulp-babel @babel/core @babel/preset-env
引入模块
// 引入gulp-babel插件
const babel = require('gulp-babel')
// 引入gulp-uglify插件
const uglify = require('gulp-uglify')
建立任务
gulp.task('jsmin', callback => {
gulp.src('./src/js/*.js')
.pipe(babel({
presets: ['@babel/env']
}))
.pipe(uglify())
callback();
})
执行任务
gulp jsmin
代码截图如下:
![](https://i-blog.csdnimg.cn/blog_migrate/49dc92f605ba9f399c5f833b7dd8c0e8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2821df5ee26264f34c29f931df17c6df.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3b38e6aa10003931cee81a0611a4450f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b22ce54f88fdd3f452f19c5aa8fc9e32.png)
五、复制目录——copy
![](https://i-blog.csdnimg.cn/blog_migrate/c8f37c18de59a085ec5b399b8ab861c5.png)
六、执行全部构建任务
![](https://i-blog.csdnimg.cn/blog_migrate/51df3554248470b68cfa83662a1c171a.png)
七、项目依赖管理
锁定包的版本,确保再次下载时不会因为包版本不同而产生问题
加快下载速度,因为该文件中已经记录了项目所依赖第三方包的树状结构和包的下载地址,重新安装时只需下载即可,不需要做额外的工作
![](https://i-blog.csdnimg.cn/blog_migrate/e03432444663dd76494001897fe8c4e8.png)
八、Node.js模块加载机制
模块查找规则——当模块拥有路径但没有后缀时
require('./find.js');
require('./find');
1.require方法根据模块路径查找模块,如果是完整路径,直接引入模块;
2. 如果模块后缀省略,先找同名JS文件再找同名JS文件夹;
3. 如果找到了同名文件夹,找文件夹中的index.js;
4. 如果文件夹中没有index.js就会去当前文件夹中package.json文件中查找main选项的入口文件;
5. 如果找指定的入口文件不存在或者没有指定入口文件就会报错,模块没有被找到;
![](https://i-blog.csdnimg.cn/blog_migrate/3f64442acb9376eb301e6e0ef8a413d4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b5a621dd4e98475b981eb86b371a870c.png)
模块查找规则——当模块没有路径且没有后缀时
require('find');
1. Node.js会假设它是系统模块;
2. Node.js会去node_modules文件夹中;
3. 首先看是否有该名字的JS文件;
4. 再看是否有该名字的文件夹;
5. 如果是文件夹看里面是否有index.js;
6. 如果没有index.js查看该文件夹中的package.json中的main选项确定模块入口文件;
7. 否则找不到报错;
![](https://i-blog.csdnimg.cn/blog_migrate/e4936e289409cd5b34e3eee9b1751b23.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f815072d9d4db86209b1a26f558c9d7a.png)