0

0

Gulp 自动化你的前端_html/css_WEB-ITnose

php中文网

php中文网

发布时间:2016-06-21 08:55:54

|

1291人浏览过

|

来源于php中文网

原创

“1. 我为什么使用grunt; 2. 我为何放弃grunt转投 gulp; 3. 我为何放弃 gulp与grunt,转投 npmscripts; 4. 我为何放弃前端” ——司徒正美

前端(段子)界的发展突飞猛进,总感觉随时会跟不上技术潮流(其实我已经被甩开了一条街,so sad

选择在这样一个时机发布一篇 gulp 教程并不是我的初衷,第一次用 gulp 是在一年前,而这篇帖子在草稿箱里躺了一个多月,再不发出来说不定就过时了。

当我在用 gulp 时我用它做什么?

  1. 编译 sass
  2. 合并优化压缩 css
  3. 校验压缩 js
  4. 优化图片
  5. 添加文件指纹(md5)
  6. 组件化头部底部(include html)
  7. 实时自动刷新…

总之,gulp是前端开发过程中对代码进行自动化构建的利器。它不仅能对资源进行优化,而且在开发过程中能够通过配置自动完成很多重复的任务,让我们可以专注于代码,提高工作效率。

然而总所周知的原因,国内到 npm服务器的连接很不稳定,如果你有V了个PN大可不必担心,也可通过设置 npm代理服务器的方式访问:

立即学习前端免费学习笔记(深入)”;

// 设置代理npm config set proxy="http://127.0.0.1:1080"// 删除代理npm config delete proxy

推荐一个简单的方案: 使用淘宝 npm 镜像 

“这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。”—— 淘宝团队点赞

npm config set registry="https://registry.npm.taobao.org"

接下来开始 gulp 教程:

准备工作: 安装 node.js(推荐 TLS 版),并重启系统。

1. 全局安装 gulp

npm install gulp -g

2. 目录结构:

└── src/            源码目录

├── build/   .html 组件

├── sass/     .scss .sass 文件

├── css/       .css 文件

├── js/         .js 文件

PaperFake
PaperFake

AI写论文

下载

└── img/     图片

└── dist/        输出目录

└── package.json

└──

gulpfile.js

3. 关于 package.json

可以使用 npm init 配置,推荐直接写入初始内容:

{  "name": "gulp-build",  "version": "1.0.0",  "description": "Gulp.js",  "private": true}

对于完整的 package.json (比如别人的开源项目), 只需对整个项目执行 npm install 即可安装 package.json 文件中声明的所有插件模块。

4. 给项目目录安装 gulp

npm install gulp --save-dev

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

PS. Windows 7及以上,按住 Shift 再右键,选择在此处打开命令窗口。免去 cd 命令定位目录的烦恼。

5. 给项目目录安装常用的插件

PS.可与上一步同时进行

npm install gulp-sass gulp-cached gulp-uglify gulp-rename gulp-concat gulp-notify gulp-filter gulp-jshint gulp-rev-append gulp-cssnano gulp-imagemin browser-sync gulp-file-include gulp-autoprefixer del --save-dev

插件将在配置文件里介绍,更多用法请参见相应的 GitHub 主页。

以上两个安装操作将会在项目目录下生成 node_modules文件夹,相应的插件都在这里。

Windows 用户请注意,此文件夹可能 无法删除 无法复制 无法移动 ,会出现诸如“ 包含名称过长且无法放入回收站”,“ 源文件名长度大于文件系统支持的长度。请尝试将其移动到具有较短路径名称的位置” 等等问题。使用一个简单的方式即可删除,使用 WinRAR “添加到压缩文件”,勾选压缩选项里的 “压缩后删除源文件” ,确定之后即可删除。

6. API

别看我,看它: http://www.gulpjs.com.cn/docs/api/

7. 代码示例

嘿嘿嘿

代码中, ?rev=@@hash  是 gulp-rev-append 插件的指纹标识。

@@include('build/header.html')
内容
@@include('build/footer.html')

代码中 @@include(‘build/header.html’) 可以插入 html 文件。

8. 我的 gulpfile.js,配置及说明

/*! * gulp * $ npm install gulp gulp-sass gulp-cached gulp-uglify gulp-rename gulp-concat gulp-notify gulp-filter gulp-jshint gulp-rev-append gulp-cssnano gulp-imagemin browser-sync gulp-file-include gulp-autoprefixer del --save-dev */// Load pluginsvar gulp = require('gulp'), // 必须先引入gulp插件    del = require('del'),  // 文件删除    sass = require('gulp-sass'), // sass 编译    cached = require('gulp-cached'), // 缓存当前任务中的文件,只让已修改的文件通过管道    uglify = require('gulp-uglify'), // js 压缩    rename = require('gulp-rename'), // 重命名    concat = require('gulp-concat'), // 合并文件    notify = require('gulp-notify'), // 相当于 console.log()    filter = require('gulp-filter'), // 过滤筛选指定文件    jshint = require('gulp-jshint'), // js 语法校验    rev = require('gulp-rev-append'), // 插入文件指纹(MD5)    cssnano = require('gulp-cssnano'), // CSS 压缩    imagemin = require('gulp-imagemin'), // 图片优化    browserSync = require('browser-sync'), // 保存自动刷新    fileinclude = require('gulp-file-include'), // 可以 include html 文件    autoprefixer = require('gulp-autoprefixer'); // 添加 CSS 浏览器前缀// sassgulp.task('sass', function() {  return gulp.src('src/sass/**/*.scss')  // 传入 sass 目录及子目录下的所有 .scss 文件生成文件流通过管道    .pipe(cached('sass'))  // 缓存传入文件,只让已修改的文件通过管道(第一次执行是全部通过,因为还没有记录缓存)    .pipe(sass({outputStyle: 'expanded'})) // 编译 sass 并设置输出格式    .pipe(autoprefixer('last 5 version')) // 添加 CSS 浏览器前缀,兼容最新的5个版本    .pipe(gulp.dest('dist/css')) // 输出到 dist/css 目录下(不影响此时管道里的文件流)    .pipe(rename({suffix: '.min'})) // 对管道里的文件流添加 .min 的重命名    .pipe(cssnano()) // 压缩 CSS    .pipe(gulp.dest('dist/css')) // 输出到 dist/css 目录下,此时每个文件都有压缩(*.min.css)和未压缩(*.css)两个版本});// css (拷贝 *.min.css,常规 CSS 则输出压缩与未压缩两个版本)gulp.task('css', function() {  return gulp.src('src/css/**/*.css')    .pipe(cached('css'))    .pipe(gulp.dest('dist/css')) // 把管道里的所有文件输出到 dist/css 目录    .pipe(filter(['*', '!*.min.css'])) // 筛选出管道中的非 *.min.css 文件    .pipe(autoprefixer('last 5 version'))    .pipe(gulp.dest('dist/css')) // 把处理过的 css 输出到 dist/css 目录    .pipe(rename({suffix: '.min'}))    .pipe(cssnano())    .pipe(gulp.dest('dist/css'))});// styleReload (结合 watch 任务,无刷新CSS注入)gulp.task('styleReload', ['sass', 'css'], function() {  return gulp.src(['dist/css/**/*.css'])    .pipe(cached('style'))    .pipe(browserSync.reload({stream: true})); // 使用无刷新 browserSync 注入 CSS});// script (拷贝 *.min.js,常规 js 则输出压缩与未压缩两个版本)gulp.task('script', function() {  return gulp.src(['src/js/**/*.js'])    .pipe(cached('script'))    .pipe(gulp.dest('dist/js'))    .pipe(filter(['*', '!*.min.js'])) // 筛选出管道中的非 *.min.js 文件    // .pipe(jshint('.jshintrc'))    // .pipe(jshint.reporter('default'))    // .pipe(concat('main.js'))    // .pipe(gulp.dest('dist/js'))    .pipe(rename({suffix: '.min'}))    .pipe(uglify())    .pipe(gulp.dest('dist/js'))});// imagegulp.task('image', function() {  return gulp.src('src/img/**/*.{jpg,jpeg,png,gif}')    .pipe(cached('image'))    .pipe(imagemin({optimizationLevel: 3, progressive: true, interlaced: true, multipass: true})) // 取值范围:0-7(优化等级),是否无损压缩jpg图片,是否隔行扫描gif进行渲染,是否多次优化svg直到完全优化    .pipe(gulp.dest('dist/img'))});// html 编译 HTML 文件gulp.task('html', function () {  gulp.src('src/*.html')    .pipe(fileinclude()) // include html    .pipe(rev()) // 生成并插入 MD5    .pipe(gulp.dest('dist/'));});// clean 清空 dist 目录gulp.task('clean', function() {  return del('dist/**/*');});// build 需要插入资源指纹(MD5),html 最后执行gulp.task('build', ['sass', 'css', 'script', 'image'], function () {  gulp.start('html');});// default 默认任务,依赖清空任务gulp.task('default', ['clean'], function() {  gulp.start('build');});// watch 开启本地服务器并监听gulp.task('watch', function() {  browserSync.init({    server: {      baseDir: 'dist' // 在 dist 目录下启动本地服务器环境,自动启动默认浏览器    }  });  // 监控 SASS 文件,有变动则执行CSS注入  gulp.watch('src/sass/**/*.scss', ['styleReload']);  // 监控 CSS 文件,有变动则执行CSS注入  gulp.watch('src/css/**/*.css', ['styleReload']);  // 监控 js 文件,有变动则执行 script 任务  gulp.watch('src/js/**/*.js', ['script']);  // 监控图片文件,有变动则执行 image 任务  gulp.watch('src/img/**/*', ['image']);  // 监控 html 文件,有变动则执行 html 任务  gulp.watch('src/**/*.html', ['html']);  // 监控 dist 目录下除 css 目录以外的变动(如js,图片等),则自动刷新页面  gulp.watch(['dist/**/*', '!dist/css/**/*']).on('change', browserSync.reload);});

9. 使用 gulp 的方法

gulp taskname // 如 gulp sass,不指定 taskname 则默认执行 default 任务

赶在四年一遇的2月29号,匆忙发表。

Gulp 自动化你的前端

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

7

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

8

2026.02.05

控制反转和依赖注入区别
控制反转和依赖注入区别

本专题整合了控制反转和依赖注入区别、解释、实现方法相关内容。阅读专题下面的文章了解更多详细教程。

11

2026.02.05

钉钉脑图插图教程合集
钉钉脑图插图教程合集

本专题整合了钉钉脑图怎么插入图片、钉钉脑图怎么用相关教程,阅读专题下面的文章了解更多详细内容。

24

2026.02.05

python截取字符串方法汇总
python截取字符串方法汇总

本专题整合了python截取字符串方法相关合集,阅读专题下面的文章了解更多详细内容。

2

2026.02.05

Java截取字符串方法合集
Java截取字符串方法合集

本专题整合了Java截取字符串方法汇总,阅读专题下面的文章了解更多详细操作教程。

1

2026.02.05

java 抽象方法
java 抽象方法

本专题整合了java抽象方法定义、作用教程等内容,阅读专题下面的文章了解更多详细内容。

2

2026.02.05

Eclipse创建jsp文件教程合集
Eclipse创建jsp文件教程合集

本专题整合了Eclipse创建jsp文件、创建jsp项目等等内容,阅读专题下面的文章了解更多详细教程。

26

2026.02.05

java 字符串转数字
java 字符串转数字

本专题整合了java如何字符串转数字相关内容,阅读专题下面的文章了解更多详细教程。

4

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

ECMAScript6 / ES6---十天技能课堂
ECMAScript6 / ES6---十天技能课堂

共25课时 | 2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号