2012-12-12 40 views
4

例如,我定义了我自己的任务jasmine。它基于任务server如何定义基于其他任务的grunt任务?

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

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

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

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

+0

我不知道为什么你认为创建另一个执行两个任务的任务看起来很愚蠢。有很多方法可以做到这一点,但不知道你想避免什么“愚蠢”,很难知道最好的答案是什么。 – Nathan

+1

'jasmine'任务应该依赖于'server'任务,不能没有它运行。但是如果'server'任务已经在使用中(可能看文件是活动的)呢?我想检查它并运行服务器任务,这是我的'jasmine'任务之前的依赖关系。 – ValeriiVasin

回答

1

服务器任务当前写入的方式,不可能。但是,您可以通过使用grunt-connect pluginrolling your owngrunt server任务来完成您想要的任务。对于内置的一个来源是在这里:

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

正如你所看到的,没有太多的它,除了读取配置,启动连接服务器,并且可能登录时--debug是通过。事实上,你可以将所有代码复制到一个帮助程序中(我很害怕这个程序很糟糕),并从你的茉莉花任务中调用它。

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

也许是最好的解决办法是:

  1. 安装咕噜-的contrib-连接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. 注册a test任务即ru ns grunt server:test jasmine给你。

    grunt.registerTask('test', 'server:test jasmine') 
    
+0

好主意通过'grunt-contrib-connect'启动少量服务器。谢谢! – ValeriiVasin

0

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

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