如何定义基于其他任务的grunt任务?

时间:2012-12-12 12:06:47

标签: javascript gruntjs

例如,我定义了自己的名为jasmine的任务。它基于任务server

如果我致电grunt server jasmine - 没关系。但我想在我的任务中声明这种依赖。

grunt.task.run - 将任务添加到队列中(在我的任务之后)。 grunt.task.requires - 只检查依赖关系,而不是运行它......

server任务之前运行jasmine任务是否存在任何方法?

P.S。我不想创建jasmine_orig任务,然后.registerTask('jasmine', 'server jasmine_orig')。看起来很傻。

2 个答案:

答案 0 :(得分:1)

当前写入服务器任务的方式,这是不可能的。但是,您可以使用grunt-connect pluginrolling your own grunt server任务执行所需操作。内置源的来源是:

https://github.com/gruntjs/grunt/blob/0.3-stable/tasks/server.js

正如您所看到的,除了读取配置,启动连接服务器以及可能在传递--debug时进行日志记录,除此之外没有太多内容。事实上,您可以将所有代码复制到一个帮助程序中(我很害怕),并从您的jasmine任务中调用它。

为测试启动一个单独的服务器(用于测试独立性)可能是一个好主意,但是如果由于某种原因需要保存资源,或者你发现其他方式令人讨厌的多个服务器,你将不得不编写一些自定义任务代码以检查服务器是否存在,然后启动服务器(如果不存在)。

可能最好的解决方案如下:

  1. 安装grunt-contrib-connect npm包:

    npm install grunt-contrib-connect --save-dev
    
  2. 为开发和测试环境进行配置:

    connect: {
      dev: {
        base: 'path/to/serve',
        port: 8000
      },
      test: {
        base: 'path/to/serve',
        port: 8001
      }
    }
    
  3. 为您注册运行test的{​​{1}}任务。

    grunt server:test jasmine

答案 1 :(得分:0)

一个部分解决方案是将特定任务的步骤定义为变量。然后,您可以将它们连接起来:

var buildSteps = [ ... ];
var distDevSteps = [ ... ];
grunt.registerTask('build', buildSteps);
grunt.registerTask('dist_dev', [].concat(buildSteps, distDevSteps));