以编程方式运行Gulp 4任务

时间:2017-02-15 19:59:53

标签: node.js gulp gulp-4

gulpfile.js中有(#191) redirect_uri is not owned by the application.定义的几个任务:

gulp.task

我想以编程方式启动其中一个。最好是在同一个进程中(没有exec等),因为这背后的原因之一是能够在调试器中运行脚本。

如何做到这一点?

看起来有类似gulp.task('sync-task', () => { ... }); gulp.task('async-task', cb => { ... }); gulp.run的内容,但在Gulp 4中已弃用。

3 个答案:

答案 0 :(得分:12)

似乎可以使用package main import ( "bufio" "encoding/json" "fmt" "io" "log" "net" "os" "strings" _"time" ) const ( COMMAND_TRANSFER_FILE = "TRANSFER_FILE" COMMAND_EXIT = "EXIT" CONNECTION_TYPE = "tcp" CONNECTION_PORT = "3645" CONNECTION_HOST = "" ) type Command struct { Identifier string `json:"identifier"` Name string `json:"name"` Size int64 `json:"size"` } type Result struct { Message string `json:"message"` } func main() { conn, _ := net.Dial(CONNECTION_TYPE, CONNECTION_HOST + ":" + CONNECTION_PORT) decoder := json.NewDecoder(conn) com := Command{} sourceFileName := "" destinationFileName := "" for { com = Command{} reader := bufio.NewReader(os.Stdin) identifier, _ := reader.ReadString('\n') com.Identifier = strings.TrimSpace(identifier) switch com.Identifier { case COMMAND_TRANSFER_FILE: fmt.Print("Source file name:") sourceFileName, _ = reader.ReadString('\n') sourceFileName = strings.TrimSpace(sourceFileName) fmt.Print("Destination file name:") destinationFileName, _ = reader.ReadString('\n') com.Name = strings.TrimSpace(destinationFileName) file, err := os.Open(sourceFileName) if err != nil { log.Fatal(err) } defer file.Close() fileInfo, err := file.Stat() fileSize := fileInfo.Size() com.Size = fileSize case COMMAND_EXIT: conn.Close() os.Exit(0) } out, _ := json.Marshal(com) conn.Write([]byte(string(out) + "\n")) if strings.Compare(com.Identifier, COMMAND_TRANSFER_FILE) == 0 { file, err := os.Open(sourceFileName) if err != nil { log.Fatal(err) } defer file.Close() n, err := io.Copy(conn, file) if err != nil { log.Fatal(err) } fmt.Println(n, "bytes sent") } var msg Result err := decoder.Decode(&msg) if err != nil { fmt.Println(err) } fmt.Println(msg) } } getter函数检索任务并直接调用:

gulp.task

答案 1 :(得分:3)

添加到接受的答案:

是的,您可以通过调用gulp.task来检索任务,但是与其直接调用,您可以将其包装在对gulp.series的调用中(大概gulp.parallel也可以)并调用< em>那个。这样的好处是可以产生预期的“开始/完成”输出。一个例子是:

gulp.series(gulp.task('some-task'))();

输出:

[09:18:32] Starting 'some-task'...
[09:18:32] Finished 'some-task' after 7.96 ms

这已经在gulp v4.0.2。上进行了测试。

答案 2 :(得分:0)

我可以执行以下操作:

gulp.task('sync-task').unwrap()();