4

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

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

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

有什么方法可以server在我的任务之前运行jasmine任务吗?

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

4

2 回答 2

1

当前编写服务器任务的方式,不,这是不可能的。但是,您可以通过使用grunt-connect 插件滚动您自己的 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运行的任务grunt server:test jasmine

    grunt.registerTask('test', 'server:test jasmine')
    
于 2013-01-29T16:41:15.137 回答
0

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

var buildSteps = [ ... ];
var distDevSteps = [ ... ];
grunt.registerTask('build', buildSteps);
grunt.registerTask('dist_dev', [].concat(buildSteps, distDevSteps));
于 2015-04-05T20:43:24.993 回答