这是Gulp系列教程的第三部分。今天我想谈一谈build任务,这个任务会执行一个构建过程所需的其它任务,例如清空资源文件以及创建个人Jekyll站点。
Build
现在我创建一个build
任务。它会执行所有其它任务,这些任务是创建站点必须的。Gulp.js默认同时运行所有任务。因此当需要特定顺序时我就遇到了问题。我需要一个node模块按顺序执行任务。
$ npm install --save-dev run-sequence@1.1.4
下一步我创建这个任务:
var gulp = require('gulp');
var runSequence = require('run-sequence');
/**
* Run all tasks needed for a build in defined order
*/
gulp.task('build', function(callback) {
runSequence('delete',
[
'jekyll',
'sass',
'scripts',
'images',
'copy:fonts'
],
'base64',
callback);
});
这个任务首先会删除assets
目录(默认删除Jekyll),然后同时创建Jekyll site,用Sass编译CSS文件,打包JavaScript文件,把图片拷贝进资源目录并拷贝矢量字体。完成sass
任务后把链接替换成Base64编码的PNG文件来内嵌入CSS文件。
你应该先把任务注释,目前为止还没写完,Gulp也无法运行。我只是先提一下之后就不需要回顾每个任务并且新增一行。
删除Assets
我使用node模块del
来清空asset
目录里的所有文件。
$ npm install --save-dev del@0.1.3
我需要添加一个清理的配置:
browsersync: {
...
},
delete: {
src: [developmentAssets]
}
从现在起我会缩短所有配置项。每个任务都有各自的选项区块。它们是JavaScript对象,所以添加新的配置项时不要忘了结尾逗号。
实际上任务如下所示:
var gulp = require('gulp');
var del = require('del');
var config = require('../../config').delete;
/**
* Delete folders and files
*/
gulp.task('delete', function(callback) {
del(config.src, callback);
});
如果你的del
版本较新或碰到了问题,因为del
任务没有完成,尝试删除函数中的callback
方法。
Jekyll
接下来我要编写创建Jekyll站点的配置和任务:
jekyll: {
development: {
src: src,
dest: development,
config: '_config.yml'
}
}
var gulp = require('gulp');
var cp = require('child_process');
var browsersync = require('browser-sync');
var config = require('../../config').jekyll.development;
/**
* Build the Jekyll Site
*/
gulp.task('jekyll', function(done) {
browsersync.notify('Compiling Jekyll');
return cp.spawn('bundle', ['exec', 'jekyll', 'build', '-q', '--source=' + config.src, '--destination=' + config.dest, '--config=' + config.config], { stdio: 'inherit' })
.on('close', done);
});
gulp.task('jekyll-rebuild', ['jekyll'], function() {
browsersync.reload();
});
Jekyll有gulp插件,但它还是开发版并且被列入了黑名单,因为它不是必要的,你可以用node运行命令行任务。但是当任务完成时我还是要发送done
状态。
这个任务的功能是运行带某些参数的jekyll build
命令。我的源文件目录为app
,目标目录为build/development
并指向_config.yml
文件。
我总是把_config.yml
和其他配置文件放在项目的根目录中。如果你不喜欢这种做法,你需要更新配置文件来指定_config.yml
文件的路径。
是否需要打包 请注意:如果没有用Gemfile来安装Jekyllname你需要修改Jekyll任务并移除
bundle exec
部分。修改return cp.spawn('bundle', ['exec', 'jekyll'…
为return cp.spawn('jekyll', ['build', '-q'…
。所以其他选项都是一样的。
还有另一个Jekyll构建任务jekyll-rebuild
,只是重建的一个容器。它的功能只是在构建完成时刷新浏览器。
源代码
总结
这是Gulp系列教程的第三部分的总结。我们学习了如何使用run-sequence
命令按照 特定顺序运行文件,如何删除文件和目录以及如何执行命令行任务,例如Jekyll。
本文根据@Stefan Imhoff的《Introduction to Gulp.js 3: Build, Clean and Jekyll》所译,整个译文带有我们自己的理解与思想,如果译得不好或有不对之处还请同行朋友指点。如需转载此译文,需注明英文出处:http://stefanimhoff.de/2014/gulp-tutorial-3-build-clean-jekyll/。
如需转载,烦请注明出处:http://www.w3cplus.com/workflow/gulp-tutorial-3-build-clean-jekyll.html