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

Javascript 如何定义基于其他任务的grunt任务?,javascript,gruntjs,Javascript,Gruntjs,例如,我定义了自己的任务,名为jasmine。它基于任务服务器 如果我打电话给grunt服务器jasmine,没关系。但是我想在我的任务中声明这种依赖性 grunt.task.run-将任务添加到队列中(在我的任务之后)。 grunt.task.requires-只检查依赖项,不运行它 在我的jasmine任务之前,是否存在运行server任务的方法 另外,我不想创建jasmine\u orig任务,然后创建.registerTask('jasmine','server jasmine\u or

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

如果我打电话给grunt服务器jasmine,没关系。但是我想在我的任务中声明这种依赖性

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

在我的
jasmine
任务之前,是否存在运行
server
任务的方法


另外,我不想创建
jasmine\u orig
任务,然后创建
.registerTask('jasmine','server jasmine\u orig')
。这看起来很傻。

服务器任务当前的编写方式,不,这是不可能的。但是,您可以通过使用或
grunt服务器
任务来执行您想要的操作。内置的源代码如下所示:

正如您所看到的,除了读取配置、启动连接服务器,以及在传递
--debug
时可能进行日志记录之外,没有太多内容。事实上,您可以将所有代码复制到一个helper中(恐怕文档不足),然后从jasmine任务中调用它

为测试启动一个单独的服务器可能是一个好主意(为了测试独立性),但是如果出于某种原因需要保存资源,或者您发现多个服务器在其他方面不合适,那么您必须编写一些自定义任务代码来检查服务器是否存在,如果没有,则启动服务器

最好的解决方案可能是:

  • 安装grunt contrib connect npm软件包:

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

    connect: {
      dev: {
        base: 'path/to/serve',
        port: 8000
      },
      test: {
        base: 'path/to/serve',
        port: 8001
      }
    }
    
  • 注册一个运行
    grunt服务器:testjasmine
    test任务

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

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

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

    我不知道你为什么认为创建另一个执行两个任务的任务看起来很愚蠢。有很多方法可以做到这一点,但如果不知道要避免什么“愚蠢”,就很难知道最好的答案是什么。
    jasmine
    任务应该依赖于
    服务器
    任务,没有它就无法运行。但是如果
    服务器
    任务已经在使用中(可能正在监视文件),该怎么办?我想检查并运行服务器任务,这是我的
    jasmine
    任务之前的一个依赖项。通过
    grunt contrib connect
    启动几个服务器是个好主意。谢谢