当前位置: 首页 > 知识库问答 >
问题:

连续执行任务,在GULP4中动态创建文件

宓诚
2023-03-14
let css_purge_libs = async () => {
var pacs = ["!bootstrap", "bulma", "animate.css"];
var paths = await fetch_resources(pacs, "bower", "css|sass");
return gulp.src(paths)
  .pipe(before(true, config.css.destination.temp + "/lib")())
  .pipe(P.if(/\.sass$/gm, P.sass().on('error', P.sass.logError)))
  .pipe(P.purgecss(config.css.purgecss))
  .pipe(gulp.dest(config.css.destination.temp + "/lib"));
};
let css_build = () => {
let paths = [`${config.css.destination.temp}/**/*.css`, `${config.css.destination.dev}**/*.css`];
return gulp.src(paths)
  .pipe(before(true, config.css.destination.build)())
  .pipe(P.postcss(config.css.postcss.plugins))
  .pipe(P.if(prod, P.sourcemaps.init()))
  .pipe(P.if(prod, P.cssnano()))
  .pipe(P.if(prod, P.concat("ariyana-build.css")))
  .pipe(P.if(prod, P.rev()))
  .pipe(P.if(prod, P.sourcemaps.write(".")))
  .pipe(gulp.dest(config.css.destination.build));
}

Gulp任务定义

gulp.task('css:purge-libs', css_purge_libs); 
gulp.task('css:build', css_build);
gulp.task("serve:dev", gulp.series(css_purge_libs, css_build, serve_dev));

问题方案

当我发出gulp serve:dev时,发生的情况附在下面的日志中。

[00:19:19] Using gulpfile D:\Enterprise\test\gulpfile.js
[00:19:19] Starting 'serve:dev'...
[00:19:19] Starting 'css_purge_libs'...
[00:19:21] Finished 'css_purge_libs' after 1.86 s
[00:19:21] Starting 'css_build'...
[00:19:25] bower_components\bulma\bulma.sass
[00:19:25] app\styles\bootstrap-reboot.css
[00:19:25] bower_components\animate.css\animate.css
[00:19:26] app\styles\main.css
[00:19:26] Finished 'css_build' after 4.69 s
[00:19:26] Starting 'serve_dev'...
[00:19:26] Finished 'serve_dev' after 1.57 ms
[00:19:26] Finished 'serve:dev' after 6.57 s
let sloop = ()=> {
  return new Promise(resolve=> {
    setTimeout(resolve, 2000);
  });
}
gulp.task('css:purge-libs', css_purge_libs); 
gulp.task('css:build', css_build);
gulp.task("serve:dev", gulp.series(css_purge_libs, sloop, css_build, serve_dev));
[00:28:58] Using gulpfile D:\Enterprise\test\gulpfile.js
[00:28:58] Starting 'serve:dev'...
[00:28:58] Starting 'css_purge_libs'...
[00:29:00] Finished 'css_purge_libs' after 1.8 s
[00:29:00] Starting 'sloop'...
[00:29:00] bower_components\bulma\bulma.sass
[00:29:00] bower_components\animate.css\animate.css
[00:29:02] Finished 'sloop' after 2.18 s
[00:29:02] Starting 'css_build'...
[00:29:08] .tmp\styles\lib\animate.css
[00:29:08] .tmp\styles\lib\bulma.css
[00:29:08] app\styles\bootstrap-reboot.css
[00:29:08] app\styles\main.css
[00:29:08] Finished 'css_build' after 6.43 s
[00:29:08] Starting 'serve_dev'...
[00:29:08] Finished 'serve_dev' after 2.96 ms
[00:29:08] Finished 'serve:dev' after 10 s

问题

  1. 为什么会这样?(请给我一个深入的解释,因为我正在搜索内部)
  2. 为什么gulp stream不能轮询文件是否已创建。
  3. 有没有更好的方法来处理这类情况?

共有1个答案

锺离珂
2023-03-14

不幸的是,这是gulp中的一个已知问题,但它没有解决方法:https://github.com/gulpjs/gulp/issues/1421

您从任务返回的内容告诉gulp如何等待:您可以返回一个流(gulp等待它完成),或者一个promise(gulp等待它解决)等等。您不能做的是返回一个流的promise,因为您正在尝试这样做。

目前的解决方案是手动等待gulp流在异步函数中结束,如下所示:

let myTask = async () => {
    let files = await getFilePaths();
    return new Promise((resolve, reject) => {
        return gulp.src(files)
            .pipe(gulp.dest('someplace'))
            .on('end', resolve)
            .on('error', reject);
    });
};
 类似资料:
  • 我有在Gradle的执行阶段创建和执行任务的需求。 目前,在构建任务期间,我确定并创建了多个添加到taskContainer的任务,使用: 在第一次执行时,我得到以下错误: >任务工件状态缓存(.../.gradle/1.5/taskartifacts)尚未被锁定。 我做错了什么,有没有更好的方法在执行过程中动态添加任务?

  • 我已经创建了3个任务。Task3取决于Task1和Task2的结果。在调试代码时,它会正确执行,但在运行应用程序时,Task3会在Task1和Task2完成之前执行。 示例代码: 提前谢谢。

  • 问题内容: 我正在使用python 2.7,我有一些看起来像这样的代码: 此处唯一的依赖项如下:dependent1需要等待任务1-3,Dependent2需要等待任务4-6,而dependent3需要等待依赖项1-2 …以下是可以的:首先运行全部6个任务并行,然后是前两个从属。 我希望尽可能多的任务并行运行,我已经在Google上搜索了一些模块,但是我希望避免使用外部库,并且不确定队列线程技术如

  • 我正在尝试使用ShadowJar插件作为同一构建文件的一部分创建两个“FatJars”。我试图通过声明两个ShadowJar类型的任务在构建中运行影子Jar任务两次 到目前为止,我已经定义了两个这样的任务: 现在我试着这样制作我的罐子: 我面临的问题是JAR是创建的,但它们不包含来自“其他”JAR的任何其他依赖项(包、文件等)。JAR只包含META-INF和当前项目的包目录。 知道有什么问题吗?

  • 问题内容: 我在Mac从属计算机上有一个iOS存档作业,这有时会花费很长时间,有时需要30分钟。问题是ssh长时间连接经常断开连接并导致任务失败。 现在我想问一下如何避免这个问题?我要寻找的是长时间连接断开但任务继续执行时。我能怎么做? 问题答案: 自2014年以来,添加keepAlive选项是一项功能请求 作为建议的解决方法,此故障单包括: 1. 更改通过添加下面一行到这个文件的末尾。这告诉ss

  • 我在netbeans中编写了一些利用swing的GUI程序,它工作得很好。我通过右键单击project>Clean and build创建了jar文件,所有的资源都来自项目属性。dist文件夹中的jar文件通过命令行执行,使用 但是每当我双击jar文件时,它就会显示“找不到主类。程序将退出”。我参考了这些链接,但没有结果:在netbeans中生成可执行jar