让我说我有这样的事情:
var gulp = require("gulp"),
argv = require("yargs").argv;
gulp.task("config", function (cb) {
"use strict";
if (argv.ftp) {
console.log("Reading FTP settings...");
} elseif (argv.sync) {
console.log("Reading Sync settings..."):
}
});
gulp.task("ftp", ["config"], function(cb) {
console.log("FTPing...");
});
gulp.task("sync", ["config"], function(cb) {
console.log("Syncing...");
});
以下是这个想法:
gulp ftp
,它依赖于gulp config
。gulp-config
检查ftp
中与config.json
相关的一些值,并提示用户输入任何遗漏的内容。gulp ftp
然后继续执行它的任务。可替换地,
gulp sync
,它依赖于gulp config
。gulp-config
检查sync
中与config.json
相关的一些值,并提示用户输入任何遗漏的内容。gulp sync
然后继续执行它的任务。我将这一切都运行得很好,除了为了使config
任务正常工作作为ftp
或sync
的依赖项,我必须运行{{1} }或gulp ftp --ftp
。我想要做的是告诉gulp sync --sync
如果它作为gulp config
的依赖项运行,则假设gulp ftp
标志,并且它作为{{1}的依赖项运行假设--ftp
标志。
所以我的问题是,有没有办法告诉gulp任务何时是另一个人的依赖?由于gulp sync
的依赖关系而导致--sync
运行时,有没有办法在gulp-config
开头检查?
更新1:我有想法做gulp-ftp
之类的事情,其中gulp-config
是一个全局变量,可以在if (argv.ftp || config === "ftp")
或config
中设置{1}}任务,但我意识到这将无法工作,因为在ftp
任务完成之后,变量才会被设置。我会继续研究......
答案 0 :(得分:1)
我想要做的是告诉
gulp ftp
如果它作为--ftp
的依赖项运行,则假定gulp sync
标志,并且&# 39; s作为--sync
的依赖关系运行,假设seq
标志。
你实际上可以这样做,虽然我不愿意推荐它,因为它不是官方记录的Gulp API的一部分。
Gulp从orchestrator
继承其任务运行功能,它将任务的执行顺序存储在数组gulp ftp
中。在命令行上运行seq
会产生['config', 'ftp']
数组config
。
因此,如果ftp
作为ftp
的依赖项运行,它将显示在seq
数组中的config
之前。您只需在gulp.task("config", function () {
if (gulp.seq.indexOf('config') < gulp.seq.indexOf('ftp') || argv.ftp) {
console.log("Reading FTP settings...");
}
if (gulp.seq.indexOf('config') < gulp.seq.indexOf('sync') || argv.sync) {
console.log("Reading Sync settings...");
}
});
任务中检查此情况:
ftp
另一个选项是检查命令行上是否已调用yargs
。 argv._
将非选项命令行参数放入gulp.task("config", function () {
if (argv._.indexOf('ftp') >= 0 || argv.ftp) {
console.log("Reading FTP settings...");
}
if (argv._.indexOf('sync') >= 0 || argv.sync) {
console.log("Reading Sync settings...");
}
});
:
ftp
但是,如果在命令行中未显式调用ftp
,则无效。如果{{1}}本身被执行,可能会发生这种情况,因为另一个任务依赖于它。
答案 1 :(得分:0)
以下是重构的解决方案:
var gulp = require("gulp");
function config(type) {
"use strict";
if (type == 'ftp') {
console.log("Reading FTP settings...");
} else if (type == 'sync') {
console.log("Reading Sync settings...");
}
}
gulp.task("config-ftp", function () {
config('ftp');
});
gulp.task("config-sync", function () {
config('sync');
});
gulp.task("ftp", ["config-ftp"], function(cb) {
console.log("FTPing...");
});
gulp.task("sync", ["config-sync"], function(cb) {
console.log("Syncing...");
});