javascript - Grunt - 在前一个任务完成后排队执行任务

标签 javascript css gruntjs minify task-queue

我在这里查看了关于创建任务的官方 Grunt 文档

http://gruntjs.com/creating-tasks

我有两个任务要执行,但第二个任务要等到第一个任务完成后才能运行。这是因为第二个任务获取第一个任务的输出并使用它来创建新输出。

分解

我的元素涉及到Bootstrap,所以有很多没用到的代码。我的第一个目标是使用 uncss 删除未使用的代码。然后我将从这个新的 css 文件中获取输出并使用 cssmin 将其缩小。

这是来自 gruntjs 的确切示例

grunt.registerTask('foo', 'My "foo" task.', function() {
  // Enqueue "bar" and "baz" tasks, to run after "foo" finishes, in-order.
  grunt.task.run('bar', 'baz');
  // Or:
  grunt.task.run(['bar', 'baz']);
});

我在这里尝试将它应用到我的代码中

grunt.registerTask('default', 'uncss', function() {
    grunt.task.run('cssmin');
});

这意味着当进入grunt时,默认是先运行uncss任务,等待它完成,然后运行cssmin任务。但是我得到了这个输出

Running "default" task

Running "cssmin:css" (cssmin) task

1 file created. 3.38kb -> 2.27kb

Done, without errors

这是我的initConfig

uncss: {
    dist: {
        files: {
            'directory/assets/stylesheets/tidy.css': ['directory/*.html', 'directory/views/*.html']
            }
        }
    },
    
    cssmin: {
        css: {
            files: {
                'directory/assets/stylesheets/styles.min.css': ['directory/assets/stylesheets/styles.css']
            }
        }
    }

换句话说,我的文件夹中有两个样式表。一个包含我创建的自定义样式,另一个包含缩小的 Bootstrap。通过运行 uncss,我将得到一个名为 tidy.css 的新 css 文件。

cssmin 任务应该寻找这个 tidy.css 文件并将其缩小,从而生成一个新的 styles.min.css 文件。

我可以让它工作,但我必须手动运行一个任务,然后再运行另一个任务。我怎样才能自动执行此操作以使其按顺序运行

最佳答案

首先,最佳实践是使用 npm 包自动加载所有任务:

// Load grunt tasks automatically
  require('load-grunt-tasks')(grunt);

这里有两个 grunt 任务:

one: {
      wake up...
    },

two: {
      dress up...
    },

这是一个接一个地运行的方式

grunt.registerTask('oneThenOther', [
    'one',
    'two'
  ]);

关于javascript - Grunt - 在前一个任务完成后排队执行任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35371622/

相关文章:

javascript - 在 CSS 动画完成后删除类 - jQuery

angularjs - 重新安装应用程序后ngAnnotate EPERM(无法写入)

javascript - 为什么 JSHint 不显示文件名?

javascript - 用于验证邮政编码并检查无效字符的正则表达式

javascript - VueJS 自定义 Prop 验证功能

css - 使用 html/css 重叠行

css - 表超过 div 的大小,因为空白

node.js - 我如何在 heroku 上设置一个 Node 应用程序(ember 应用程序套件)来读取 ENV 变量并使值可用于应用程序?

javascript - IntelliJ IDEA 中的 JSDoc 支持

javascript - angularjs 500内部错误