【问题标题】:How to be notified of each task run in grunt?如何通知在 grunt 中运行的每个任务?
【发布时间】:2013-06-17 23:59:36
【问题描述】:

我在 phonegap 应用程序中使用 grunt。 在构建我的 webapp 时,我正在为 android、ios 和 web 移动平台生成。 所以每次我声明一个任务时,通常我有 3 个目标,每个平台一个。

我想在启动时更改一些 grunt 任务配置。 因此,我希望每次运行任务时都能收到通知。

例如,我经常有这样的事情:

sass: { // some task
    options: {
        // some options
    },
    android: {
        // android configuration
    },
    ios: {
        // ios configuration
    },
    web: {
        // web configuration
    }
}

在我的 grunt 文件中,我有一个部分可以声明每个目标的状态(活动/非活动),以便我只能构建一个、两个或三个目标。我不想每次都构建所有东西。

例如,当使用 grunt 命令构建时,我不想手动指定每个目标。 我想检测活跃的并只构建那些。在使用 grunt-contrib-watch 之类的插件并声明任务执行时,我无法提前声明每个目标。现在我有 3 个目标,但由于是 phonegap,我明天可能有 7 个。

我可以使用任何 API 或任何未记录的事件来在每次运行之前收到通知并动态修改运行范围吗?

我只看到一个实际咕噜状态的解决方案: - 创建我自己的插件(例如 n),它将作为任务执行的包装器:

grunt n:sass will generate grunt sass:ios sass:web if these two targets are actives

任何帮助表示赞赏。 谢谢。 最好的问候。

【问题讨论】:

  • 在您的 grunt 调用中添加 --verbose 参数怎么样?够了吗?
  • 不,我不想知道发生了什么,我想干预和改变通话。

标签: javascript gruntjs


【解决方案1】:

终于找到了更好的解决方案。

我没有创建任务包装器,而是使用 grunt.util.hooker API 来挂钩 grunt.task.run 方法。 现在我可以拦截电话并用我的电话替换它。

以我为例:

grunt sass

将被拦截并替换为

grunt sass:web

【讨论】:

    猜你喜欢
    • 2013-02-23
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多