Gulp
基于流的自动化构建工具
gulp 为 Node.js 的套件,所以安装 gulp 前请先安装 Node.js
如何学习
文档文档文档,所以的一切根源都来自于文档。
文档永远是首选资源。国外技术文档大多英文为主,国内翻译者会把文档翻译成中文文档。可以通过中文文档入门,再通过英文文档看是翻译是否有语意错误或者遗漏的地方。
开发者笔记。可以在简书、知乎搜多相关开发者的笔记,笔记是开发者看文档后的小结,有一定意义的借鉴作用,但要注意版本问题。
开发问题。可以在其 Github 、stackoverflow 或者 思否,查询开发者在使用这个工具、插件、库时候遇到的问题。
视频辅助。查看录制视频。
请教身边的小伙伴。
参照 DEMO 体验完成。
学习建议
查看官网文档 - 入门指南,了解 Glup 运行的方式。
查看官方文档 - API,了解.src, .watch, .dest, 方法概念。
了解 Gulp 的常用插件包,当我们想去做某件事情的时候,可以在插件主站上搜索,然后点击去查看插件文档了解其插件的使用方法,例如我们想使用 Less ,我们就输入 gulp-less 就可以看到众多与 Less 相关的 gulp 插件。
按照 gulp-less 文档,配置 Less 相关的文件转译体验。
在 ES6 转译 ES5 的插件中,Babel 当前最主流的插件,登录 Babel 官网查看,点击文档中配置 ,在选择你的工具中构建系统选择 Gulp 然后按指示配置。
体验以下DEMO,和使用了那些插件做了些什么,为什么要这么写。之后保证在不看 DEMO 的前提下也能配置出自己的 Glup 打包配置方案,对 Less/Sass 及 ES6 进行转译处理。
如果通过文档的方式不能深入理解,请领取视频配合学习。
DEMO
通过以下事例子,完成一个 JavaScript ES6 及 Less 的开发环境配置。
- 全局安装 gulp
npm install gulp-cli -g
- 创建项目文件夹并进入
cd ~/Desktop && mkdir gulp-init && cd gulp-init
- 初始化 package ,输入命令后一路回车。
npm init
- 下载各种依赖包,其中包括
gulp
gulp-rename
gulp-header
用于 ES6 转译
- gulp-babel@next
- @babel/core
- @babel/preset-env
用于 压缩
- gulp-uglify
用于 Less 转译
- gulp-less
- gulp-postcss
- gulp-cssnano
- autoprefixer
npm install gulp gulp-rename gulp-header gulp-babel@next @babel/core @babel/preset-env gulp-uglify gulp-postcss gulp-less gulp-cssnano autoprefixer --save-dev
Gulp 使用 ES6 转译更多内容,可以到 babel 官网查看
Gulp 处理 Less 之后,使用了 postcss 对其进行了其他优化,例如 cssnano 代码优化 及 autoprefixer 后缀添加。
- 在根目录下创建 .babelrc 文件,并编辑
touch .babelrc
{
"presets": ["@babel/preset-env"]
}
- 在根目录创建开发环境目录 src , 并在 src 文件夹中 创建 js / less / images 文件夹
mkdir src && cd src && mkdir js & mkdir less
- 在 /src/js 文件夹中 创建 index.js 并编辑
touch index.js
let test = () => console.log('ok');
test();
- 在 /src/less 文件夹中 创建 index.less 并编辑
touch index.less
.xxx-section{
color: #333;
.xxx-list{
transform: translate(-50%);
}
}
在 /src/images 文件夹中添加任意一张图片 例如 avatar.png
在根目录创建 gulpfile.js , Gulp 运行主文件。
touch gulpfile.js
const { src, dest, parallel, watch } = require('gulp');
const header = require('gulp-header');
const babel = require('gulp-babel');
const uglify = require('gulp-uglify');
const less = require('gulp-less');
const rename = require('gulp-rename');
const postcss = require('gulp-postcss');
const cssnano = require('gulp-cssnano');
const autoprefixer = require('autoprefixer');
const pkg = require('./package.json');
var banner = [
'/*!',
' * <%= pkg.name %> v<%= pkg.version %>',
' * Copyright <%= new Date().getFullYear() %> Jaxzhu, Inc.',
' * Licensed under the <%= pkg.license %> license',
' */',
''
].join('\n');
function script() {
return src('src/js/*.js')
.pipe(babel())
.pipe(uglify())
.pipe(header(banner, { pkg: pkg }))
.pipe(dest('./dist/js'));
}
function style(){
return src('src/less/*.less')
.pipe(less())
.pipe(postcss([autoprefixer(['iOS >= 8', 'Android >= 4.1'])]))
.pipe(
cssnano({
zindex: false,
autoprefixer: false,
reduceIdents: false,
discardComments: { removeAll: true }
})
)
.pipe(
rename(function(path) {
path.extname = '.min.css';
})
)
.pipe(header(banner, { pkg: pkg }))
.pipe(dest('./dist/css'));
}
function images() {
return src('src/images/*')
.pipe(dest('./dist/images'));
}
function watchAll() {
return watch('src/**', parallel(script, style, images))
}
exports.script = script;
exports.style = style;
exports.images = images;
exports.default = watchAll;
- bash 进入项目更目录中运行 gulp , 观察生成 dist 文件夹的各个文件。
gulp
- 参考代码地址
https://github.com/zhuayu/gulp4-init