如何最大限度地减少有时需要回调的代码重复?
How can I minimize duplication of code that sometimes needs a callback?
在我的 gulp 文件中,我有一个任务处理我的所有页面,另一个任务监视我的页面是否有更改并只处理更改的页面。它看起来像这样:
const buildPages = path => cb => {
gulp.src(path)
// some lines of piping
.pipe(gulp.dest(pages.dist));
cb();
}
const watchPages = () =>
gulp.watch(pages.src).on('change', path =>
gulp.src(path)
// the same piping as above
.pipe(gulp.dest(pages.dist))
);
gulp.watch()
返回的chokidar watcher对象的.on()
方法没有接收回调函数,而它上面的gulp任务需要一个。所以要删除代码重复,我可以这样做:
const buildPages = path =>
gulp.src(path)
// some lines of piping
.pipe(gulp.dest(pages.dist));
const buildPagesWithCallback = path => cb => {
buildPages(path)
cb();
}
const watchPages = () =>
gulp.watch(pages.src).on('change', path =>
buildPages(path)
);
这是解决它的正确方法吗,或者是否有一种方法可以在不创建额外函数的情况下删除重复项(也许通过让观察者接收回调)?
不确定你的另一个 requirements/needs 是什么,但根据你的描述,我通常会有这样的设置(假设你使用的是 gulp 4):
const src = [ './src/pageA/**/*.js', ...others ];
const dist = './dist';
const buildPages = () => gulp.src(src).pipe(...).pipe(gulp.dest(dist));
const callback = () => { /* do stuff */ };
exports.buildPageWithCallback = gulp.series(buildPages, callback);
exports.watchPages = () => gulp.watch(src, gulp.series(buildPages));
exports.watchPageWithCallback = () => gulp.watch(src, gulp.series(buildPages, callback));
我会使用 gulp.series
到 运行 回调而不显式地将回调传递给任务创建者函数,并将任务直接传递给 gulp.watch
。
如果你的要求是buildPages
接受一个path
,那我觉得你的做法是对的,如果我理解错了请见谅
在我的 gulp 文件中,我有一个任务处理我的所有页面,另一个任务监视我的页面是否有更改并只处理更改的页面。它看起来像这样:
const buildPages = path => cb => {
gulp.src(path)
// some lines of piping
.pipe(gulp.dest(pages.dist));
cb();
}
const watchPages = () =>
gulp.watch(pages.src).on('change', path =>
gulp.src(path)
// the same piping as above
.pipe(gulp.dest(pages.dist))
);
gulp.watch()
返回的chokidar watcher对象的.on()
方法没有接收回调函数,而它上面的gulp任务需要一个。所以要删除代码重复,我可以这样做:
const buildPages = path =>
gulp.src(path)
// some lines of piping
.pipe(gulp.dest(pages.dist));
const buildPagesWithCallback = path => cb => {
buildPages(path)
cb();
}
const watchPages = () =>
gulp.watch(pages.src).on('change', path =>
buildPages(path)
);
这是解决它的正确方法吗,或者是否有一种方法可以在不创建额外函数的情况下删除重复项(也许通过让观察者接收回调)?
不确定你的另一个 requirements/needs 是什么,但根据你的描述,我通常会有这样的设置(假设你使用的是 gulp 4):
const src = [ './src/pageA/**/*.js', ...others ];
const dist = './dist';
const buildPages = () => gulp.src(src).pipe(...).pipe(gulp.dest(dist));
const callback = () => { /* do stuff */ };
exports.buildPageWithCallback = gulp.series(buildPages, callback);
exports.watchPages = () => gulp.watch(src, gulp.series(buildPages));
exports.watchPageWithCallback = () => gulp.watch(src, gulp.series(buildPages, callback));
我会使用 gulp.series
到 运行 回调而不显式地将回调传递给任务创建者函数,并将任务直接传递给 gulp.watch
。
如果你的要求是buildPages
接受一个path
,那我觉得你的做法是对的,如果我理解错了请见谅