全名:《Web前端自动化构建 Gulp、Bower和Yeoman开发指南》
作者:Stefan Banumgartner【奥】
译者:谈博文
Gulp是用JavaScript编写、运行在Node.js上的构建工具。
Gulp命令行接口,简称Gulp CLI,需要全局安装,使得Gulp能够在终端、bash和命令行提示符中直接运行。
首先,检查是否正确安装了Node.js:
node -v
如果已经安装了Node,检查Node.js的包管理器NPM,
npm -v
在确定Node.js和NPM都已经正确安装后,安装Gulp CLI:
npm install -g gulp-cli
运行下面命令,确保Gulp CLI安装成功。
gulp -v
输出:
CLI version 2.0.1
安装成功。
全局安装的Gulp是Gulp CLI。它的作用是检查本地Gulp是否可用和启动本地Gulp。
本地Gulp位于本地的JavaScript项目的node_modules目录下,包含了Gulpfile所需的全部函数和API。
执行如下命令:
npm init
npm install --save-dev gulp
此时,package.json文件如下:
{
"name": "gulp_sample",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"devDependencies": {
"gulp": "^4.0.0",
}
}
检查gulp版本,发生如下变化:
CLI version 2.0.1
Local version 4.0.0
增加了local version,注意: 确保本地安装的gulp版本至少为Gulp 4。
Gulpfile是包含了所有安装指令的js文件,安装指令包含一系列被打包成task(任务)的命令。
const gulp = require('gulp');
gulp.task('testGulp', async() => { //hello world task,仅用于测试
await console.log('Hello World!');
});
运行gulp testGulp
,输出结果如下:
[15:58:13] Using gulpfile D:\Auto_build_book\ch_03\gulpfile.js
[15:58:13] Starting 'testGulp'...
Hello World!
[15:58:13] Finished 'testGulp' after 2.24 ms
gulp-uglify
来进行js文件的混淆和压缩;gulp-concat
合并js文件`;gulp-jshint
进行js的代码检查,注意要同时安装jshint和gulp-jshint
;gulp-less
来编译.less文件;gulp-clean-css
对编译好的css文件进行压缩;gulp-autoprefixer
添加css的浏览器前缀;最终的gulpfile.js如下:
const gulp = require('gulp');
const uglify = require('gulp-uglify');
const concat = require('gulp-concat');
const jshint = require('gulp-jshint');
const less = require('gulp-less');
const minifycss = require('gulp-clean-css');
const prefix = require('gulp-autoprefixer');
gulp.task('scripts', () => { //用来合并和压缩js文件
return gulp.src(['app/scripts/**/*.js', '!app/scripts/vendor/**/*.js'])
.pipe(concat('main.min.js'))
.pipe(uglify())
.pipe(gulp.dest('dist/scripts'));
});
gulp.task('styles', () => { //用来编译和压缩“less”文件
return gulp.src('./app/styles/main.less') // gulp.src :可读流
.pipe(less())
.pipe(minifycss())
.pipe(prefix()) //运行Autoprefixer自动添加浏览器前缀
.pipe(gulp.dest('dist/styles')); //gulp.dest :可写流
});
gulp.task('test', () => {
return gulp.src('./app/**/*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'))
.pipe(jshint.reporter('fail'))
});
现在,我们已经有了一个简单的gulpfile来处理代码,但是它还不能提供一个成熟的开发环境,下一章将会扩展这个gulpfile。