gpt4 book ai didi

node.js - 我如何在 gulp 4.0 版中重写这个 gulpfile.js

转载 作者:行者123 更新时间:2023-12-02 02:45:30 34 4
gpt4 key购买 nike

我的目标是通过代表我在终端上执行“clasp push”,在 gulp 的帮助下编辑时自动推送文件。

当我在 gulpfile.js 中写入以下内容时出现此错误

const gulp = require("gulp");
const exec = require("child_process");

gulp.task('push', function () {
exec("clasp push")
});

gulp.task('watch', function () {
gulp.watch([
'**/* .js',
"**/* .html"
], ['push'])
});

gulp.task('default', ['watch']);

错误:

Task function must be specified
at Gulp.set [as _setTask] (/Users/micklo/Desktop/AppsScriptProjects/AppsScriptAppName/node_modules/undertaker/lib/set-task.js:10:3)
at Gulp.task (/Users/micklo/Desktop/AppsScriptProjects/AppsScriptAppName/node_modules/undertaker/lib/task.js:13:8)
at Object.<anonymous> (/Users/micklo/Desktop/AppsScriptProjects/AppsScriptAppName/gulpfile.js:15:6)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)
at Module.require (internal/modules/cjs/loader.js:637:17)
at require (internal/modules/cjs/helpers.js:22:18)

然后我意识到我正在使用 Gulp 版本 4.0.0

然后我把代码改成了下面的代码:compatible with Gulp V 4.0.0

const gulp = require("gulp");
const exec = require("child_process");

gulp.task('push', gulp.series('', function(){
exec("clasp push")
}));

gulp.task('watch', gulp.series('push',function () {
gulp.watch([
'**/* .js',
"**/* .html"
])
}));

gulp.task('default', gulp.series('watch', function(){
gulp.watch([
'**/* .js',
"**/* .html"
]);
}));

但是我仍然得到这个错误:

assert.js:350 throw err; ^

AssertionError [ERR_ASSERTION]: Task never defined: 
at getFunction (/Users/micklo/Desktop/AppsScriptProjects/AppsScriptAppName/node_modules/undertaker/lib/helpers/normalizeArgs.js:15:5)
at map (/Users/micklo/Desktop/AppsScriptProjects/AppsScriptAppName/node_modules/arr-map/index.js:20:14)
at normalizeArgs (/Users/micklo/Desktop/AppsScriptProjects/AppsScriptAppName/node_modules/undertaker/lib/helpers/normalizeArgs.js:22:10)
at Gulp.series (/Users/micklo/Desktop/AppsScriptProjects/AppsScriptAppName/node_modules/undertaker/lib/series.js:13:14)
at Object.<anonymous> (/Users/micklo/Desktop/AppsScriptProjects/AppsScriptAppName/gulpfile.js:4:24)
at Module._compile (internal/modules/cjs/loader.js:701:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)
at Module.load (internal/modules/cjs/loader.js:600:32)
at tryModuleLoad (internal/modules/cjs/loader.js:539:12)
at Function.Module._load (internal/modules/cjs/loader.js:531:3)

我做错了什么?

一些信息:

OS: Mac Os (Mojave)

Gulp Versions -> CLI version: 2.1.0, Local version: 4.0.0

Node: v10.15.3

Clasp: 2.1.0

最佳答案

该特定错误的快速修复是您已调用 gulp.series在你的 push 中的一个空的/不存在的任务上任务。 gulp.series期待与您声明的任务(例如 pushwatchdefault )或任务函数相对应的字符串列表。

摆脱 ''该系列中的任务将修复它:

gulp.task('push', gulp.series(function(){
exec('clasp push')
}));

但是你现在还有其他一些问题:

  1. 您的任务都没有回调。每个 Gulp 任务都是异步的,因此您必须使用回调或 return一个流/ promise /事件发射器/子进程/可观察的(例子是 located in the docs here )。例如:
gulp.task('push', function(done){
exec('clasp push', function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
done(err);
});
});
  1. 您没有将函数或串联/并联序列传递给 gulp.watch所以它什么也没做。如果您尝试运行 push任何时候的任务.js.html文件已更改,您需要将其更改为:
gulp.task('watch', function(done) {
gulp.watch([
'**/*.js',
'**/*.html'
], gulp.series('push'));
done();
});
  1. 您的 glob 模式在文件扩展名之前的 watch 命令中有一个额外的空间:'**/*.js'而不是 '**/* .js'
  2. 您可能需要 require("child_process").exec (带有额外的 .exec 标记)允许您使用 exec(command) 执行 shell 命令句法。
  3. 您无需重复 watchdefault 中调用它时的命令任务:
gulp.task('default', gulp.series('push', 'watch'));
  1. 您可以删除很多 gulp.series调用删除 <anonymous>任务调用并简化任务。每项任务只需要一个功能,您应该以使用 gulp.series 为目标。和 gulp.parallel与命名任务集。

改变这些点,代码应该是这样的:

const gulp = require('gulp');
const exec = require('child_process').exec;

gulp.task('push', function(done){
exec('clasp push', function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
done(err);
});
});

gulp.task('watch', function(done) {
gulp.watch([
'**/*.js',
'**/*.html'
], gulp.series('push'));
done();
});

gulp.task('default', gulp.series('push', 'watch'));

您可以使用 gulp v4 推荐的导出任务模式重写它:

const { series, watch } = require('gulp');
const { exec } = require('child_process');

function push(done) {
exec('clasp push', function (err, stdout, stderr) {
console.log(stdout);
console.log(stderr);
done(err);
});
}

function watchPush() {
return watch(['**/*.js', '**/*.html'], push);
}

exports.push = push;
exports.default = exports.watch = series(push, watchPush);

关于node.js - 我如何在 gulp 4.0 版中重写这个 gulpfile.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55413925/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com