如果你以前没用用过任何任务脚本(task runner)或者命令行工具,那也不要害怕,这篇文章可以一步步教你上手gulp,升职CEO,赢娶白富美,走上人生巅峰,吼吼吼,好开森,有木有?!我会分为五步向你介绍gulp并帮助你完成一些屌炸天的事情。话不多说,直接开始吧。
第一步:安装Node
首先,最基本也最重要的是,我们需要搭建Node环境。访问node官网,然后点击大大的绿色的install按钮,下载完成后直接运行程序,就一切准备就绪。npm1会随着安装包一起安装,稍后会用到它。
第二步:使用命令行
也许现在你还不是很了解什么是命令行——OSX中的终端(Terminal),windows中的命令提示符(Command Prompt),但很快你就会知道。它看起来没那么简单,但一旦掌握了它的窍门,就可以很方便的执行很多命令行程序,比如Sass,Yeoman和Git等,这些都是非常有用的工具。
如果你很熟悉命令行,直接跳到步骤四。
为了确保Node已经正确安装,我们执行几个简单的命令。
node -v
回车(Enter),如果正确安装的话,你会看到所安装的Node的版本号,接下来看看npm。
npm -v
这同样能得到npm的版本号。
如果这两行命令没有得到返回,可能node就没有安装正确,尝试重启下命令行工具,如果还不行的话,只能回到第一步进行重装。
第三步:定位到项目
现在,我们已经大致了解了命令行并且知道如何简单使用它,接下来只需要两个简单的命令就能定位到文件目录并看看目录里都有些什么文件。
cd
定位到目录ls
列出文件列表
建议多敲敲这两个命令,了解文件系统并知道文件都在哪里。
习惯使用了这两个命令后,就要进入我们的项目目录,这个目录各不相同,举个例子,这是我进入我项目目录的命令:
cd /Applications/XAMPP/xamppfiles/htdocs/my-project
成功进入项目目录后,我们开始安装gulp。
第四步:安装gulp
我们已经知道如何使用命令行,现在尝试点新的东西,认识npm然后安装gulp。
在命令行中输入
sudo npm install -g gulp
sudo
是以管理员身份执行命令,一般会要求输入电脑密码;npm
是安装node模块的工具,执行install命令;-g
表示在全局环境安装,以便任何项目都能使用它;最后,gulp是将要安装的node模块的名字。
运行时注意查看命令行有没有错误信息,安装完成后,你可以使用下面的命令查看gulp的版本号以确保gulp已经被正确安装。
gulp -v
接下来,我们需要将gulp安装到项目本地
npm install —-save-dev gulp
这里,我们使用—-save-dev
来更新package.json文件,更新devDependencies
值,以表明项目需要依赖gulp。
Dependencies
可以向其他参与项目的人指明项目在开发环境和生产环境中的node模块依懒关系,想要更加深入的了解它可以看看package.json文档。
第五步:新建Gulpfile文件,运行gulp
安装好gulp后我们需要告诉它要为我们执行哪些任务,首先,我们自己需要弄清楚项目需要哪些任务。这里举例出几个很常用的功能。
检查js 这里使用的是gulp-jshint模块来完成这项功能;
编译sass sass是一种css预处理语言,它弥补了css本身无法完成像其它编程语言一样的嵌套、继承、设置变量等工作。这里使用gulp-compass模块来完成这项功能。使用gulp-compass需要先安装compass,因为这篇文章的主角是gulp,所以暂且不对compass做过多说明了。如果想知道copmass安装方法可以先自行百度,以后呢,我也会出有关compass方面的文章,敬请期待咯~
合并js 这里使用gulp-concat模块来完成这项功能;
压缩并重命名合并后的js 这里使用gulp-uglify模块和gulp-rename模块配合来完成这项任务。
安装依赖
npm install gulp-jshint gulp-compass gulp-concat gulp-uglify gulp-rename --save-dev
提醒下,如果以上命令提示权限错误,需要添加
sudo
再次尝试。
新建gulpfile文件
现在,组件都安装完毕,我们需要新建gulpfile文件以指定gulp需要为我们完成什么任务。
gulp只有五个方法: task
,run
,watch
,src
,和dest
,在项目根目录新建一个js文件并命名为gulpfile.js。我按照代码书写顺序贴上代码并依次讲解,大家把每一块代码拼接在一起就是完整文件了。多感人啊~多么有节操呀~大家用起来一点不打麻烦~
引入模块
var gulp = require('gulp'),
jshint = require('gulp-jshint'),
compass = require('gulp-compass'),
concat = require('gulp-concat'),
uglify = require('gulp-uglify'),
rename = require('gulp-rename');
这一步,我们引入了核心的gulp和其他依赖组件,接下来,分开创建lint, sass, scripts 和 default这四个不同的任务。
Lint任务
gulp.task('lint', function() {
gulp.src('./js/*.js')
.pipe(jshint())
.pipe(jshint.reporter('default'));
});
Link任务会检查js/
目录下得js文件有没有报错或警告。
Compass任务
gulp.task('compass', function() {
gulp.src(['scss/**/**/*.scss','!scss/lib/*.scss'])
.pipe(compass({
config_file: './config.rb',
css: 'css',
sass: 'scss',
comments: true
}))
.pipe(gulp.dest('css'));
});
Compass任务会编译scss/目录下二级文件夹内的scss文件,并把编译完成的css文件保存到/css目录中。这里我屏蔽了scss/lib/
目录,主要因为我的习惯是把reset文件或者base文件写在lib目录下,而这些文件一般都是被非公用的scss文件引入来使用的,很少单独在页面内引入,所以就不特意编译了。
Compass配置
这里我要着重说明一下gulp-compass中的几个至关重要的配置项。
comments
默认:false
描述:是否显示注释。
css
默认:css
描述:指定输出的css文件目录。
sass
默认:sass
描述:指定待编译的scss文件目录。
css
sass
配置内容必须要和config.rb
文件中的css
sass
项配置内容相同,否则无法完成编译。这件事情灰常重要,请自行在心中默念三遍。
Watch任务
主要的作用是检测scss/目录下有没有文件更改,如果有的话,运行compass任务来对sass文件进行编译。
gulp.task('watch', function() {
gulp.watch(['scss/**/**/*.scss','!scss/lib/*.scss'], ['compass']);
});
Scripts 任务
gulp.task('scripts', function() {
gulp.src('./js/*.js')
.pipe(concat('all.js'))
.pipe(gulp.dest('./dist'))
.pipe(rename('all.min.js'))
.pipe(uglify())
.pipe(gulp.dest('./dist'));
});
scripts任务会合并js/
目录下得所有得js文件并输出到dist/
目录,然后gulp会重命名、压缩合并的文件,也输出到dist/
目录。
default任务
gulp.task('default', function(){
gulp.run('lint', 'compass', 'scripts');
gulp.watch('./js/*.js', function(){
gulp.run('lint', 'sass', 'scripts');
});
});
这时,我们创建了一个基于其他任务的default任务。使用.run()
方法关联和运行我们上面定义的任务,使用.watch()
方法去监听指定目录的文件变化,当有文件变化时,会运行回调定义的其他任务。
现在,回到命令行,可以直接运行gulp任务了。
gulp
这将执行定义的default任务,换言之,这和以下的命令式同一个意思
gulp default
当然,我们可以运行在gulpfile.js中定义的任意任务,比如,现在运行sass任务:
gulp compass
结束语
现在已经做到了设置gulp任务然后运行他们,现在再回顾下之前学习的。
学习了安装Node环境
学习了简单使用命令行
学习了用命令行进入项目目录
学习了使用npm和安装gulp
学习了如何运行gulp任务
另外,有一些参考资源供进一步学习:
本文改编自老婆婆的文章《前端构建工具gulp入门教程》