Gulp – 重新编译标记的颠簸版本

关于我使用gulp-tag-version的问题 ,自述文件中提出:

function inc(importance) { // get all the files to bump version in return gulp.src(['./package.json', './bower.json']) // bump the version number in those files .pipe(bump({type: importance})) // save it back to filesystem .pipe(gulp.dest('./')) /* Recompile the Javascript here */ // commit the changed version number .pipe(git.commit('bumps package version')) // read only one file to get the version number .pipe(filter('package.json')) // **tag it in the repository** .pipe(tag_version()) } gulp.task('patch', function() { return inc('patch'); }) gulp.task('feature', function() { return inc('minor'); }) gulp.task('release', function() { return inc('major'); }) 

我想重新编译一些Javascript之间的版本被撞和git标签。 我有一个任务, js ,但不清楚如何可以调用js任务(或以其他方式重新sorting凹凸/标记任务),以实现这个共同的和理想的结果(即有您的头的版本编译代码)。

还值得注意的是,如果有三个任务bumpcompiletag ,那么package.json缓冲区似乎被caching,而不会被单独的tag任务重新读取。

一个简单的方法来得到这个工作是得到3个新的独立的任务相互依赖:

  • tag取决于commit ,因为标签将被应用到我们之前必须做的最后一次提交
  • commit取决于js ,因为我们应该用碰撞版本来重build你的文件
  • js取决于bump ,在做任何事之前碰撞清单文件的版本
  • bump没有依赖性。

与此问题是,你将不得不改变你的js添加bump依赖,我敢肯定,你不想每当你重新编译或watch触发你的watch

所以你可以使用像run-sequence这样的东西来绕过它。

还有一件事我喜欢减less吞噬任务的数量是使用参数,但是如果你愿意的话,你可以使用inc函数,这是一个细节(这里是 – --major , – --minor--patch )。

所以你可以做这样的事情(在执行顺序中从上到下):

 gulp.task('uprev', function () { return gulp.src(['./package.json', './bower.json']) .pipe(bump({ type: process.argv[3] ? process.argv[3].substr(2) : 'patch' })) .pipe(gulp.dest('./')); }); gulp.task('rebuild', function (cb) { runSequence('uprev', 'js', cb); //uprev will here be executed before js }); gulp.task('commit', ['rebuild'], function () { return gulp.src(['./package.json', './bower.json', 'dist/**/*']) .pipe(git.add()) .pipe(git.commit('bump version')); }); gulp.task('bump', ['commit'], function () { return gulp.src('package.json') .pipe(tagVersion()); }); 

对于你的提交,你可能想要添加你的清单和编译的文件,我已经添加了一个随机的dist文件夹的所有内容的演示。

我故意减less了bumpcommit任务,所以你不必使用gulp-filter ,在我看来,这对于这个小东西来说是相当无用的,但是当然这是你想要的。

最后一件事(承诺),你可以避免使用gulp-tag-version,通过使用一个简单的节点fs调用与你已经拥有的gulp-git结合:

 gulp.task('bump', ['commit'], function (cb) { fs.readFile('./package.json', function (err, data) { if (err) { return cb(err); } var version = JSON.parse(data.toString()).version; git.tag(version, 'Version message', function (err) { cb(err); }); });