gruntjs服务器任务的目的是什么?

gre*_*emo 61 node.js gruntjs

我正在学习如何推动使用gruntjs.我找到了服务器任务,但我无法理解.

我可以使用服务器任务映射连接/缩小文件来测试我的应用程序(使用backbone.js)而无需在Web服务器根目录中移动或放置源文件吗?没有apache例如.

如果不是,服务器任务的假设用途是什么?

Jon*_*ski 80

server任务用于启动静态服务器,并将base路径设置为Web根目录.

示例:服务./web-roothttp://localhost:8080/:

grunt.initConfig({
  server: {
    port: 8080,
    base: './web-root'
  }
});
Run Code Online (Sandbox Code Playgroud)

它的功能类似于Apache服务器,根据路径提供静态文件,但通过connect使用http模块进行设置().

如果您需要它不仅仅提供静态文件,那么您将需要考虑定义自定义server任务:

grunt.registerTask('server', 'Start a custom web server.', function() {
  grunt.log.writeln('Starting web server on port 1234.');
  require('./server.js').listen(1234);
});
Run Code Online (Sandbox Code Playgroud)

和自定义服务器实例:

// server.js
var http = require('http');
module.exports = http.createServer(function (req, res) {
    // ...
});
Run Code Online (Sandbox Code Playgroud)

我可以使用服务器任务映射连接/缩小文件来测试我的应用程序[...]

级联和缩小有自己专用的任务- concatmin-但也伴随着被用在server任务完成所有3.


编辑

如果您希望它将服务器持续一段时间(以及grunt),您可以将任务定义为异步(使用服务器的'close'事件):

grunt.registerTask('server', 'Start a custom web server.', function() {
  var done = this.async();
  grunt.log.writeln('Starting web server on port 1234.');
  require('./server.js').listen(1234).on('close', done);
});
Run Code Online (Sandbox Code Playgroud)

  • 只要grunt忙于任务,服务器就会运行.保持打开的快速而肮脏的方法是使用grunt.registerTask("run","server watch");. 要取消手表,将关闭浏览器. (14认同)
  • 道具,@ widged!`grunt.registerTask("run","server watch")`非常聪明.为什么不将它作为一个单独的答案,以便更明显? (4认同)
  • @Gremo这实际上是[设计](https://github.com/cowboy/grunt/blob/master/docs/task_server.md#about-%E2%9A%91):"*一旦咕噜的任务已经完成, Web服务器停止.*"它不是用于启动服务器以进行无限期/生产使用; 不仅仅是因为它提供给其他的任务,特别是测试可能模仿Web的客户端([`http.request()`](http://nodejs.org/api/http.html#http_http_request_options_callback)或[`request` ](https://npmjs.org/package/request)). (2认同)

Gio*_*tto 53

server现在的任务是connect任务,它包含在grunt-contrib-connect包中.

connect任务启动一个连接Web服务器.

使用以下命令安装此插件:

npm install grunt-contrib-connect --save-dev
Run Code Online (Sandbox Code Playgroud)

注意:--save-dev包含您的软件包devDependencies,请参阅https://npmjs.org/doc/install.html

安装插件后,可以使用以下JavaScript代码在Gruntfile中启用它:

grunt.loadNpmTasks('grunt-contrib-connect');
Run Code Online (Sandbox Code Playgroud)

使用该grunt connect命令运行此任务.

请注意,只要grunt正在运行,此服务器就会运行.一旦grunt的任务完成,Web服务器就会停止.可以使用该keepalive选项更改此行为,并且可以通过运行任务来临时启用此行为grunt connect:targetname:keepalive.targetname在下面的代码示例中等于"server".

在这个例子中,grunt connect(或者更详细地说grunt connect:server)将启动静态Web服务器http://localhost:9001/,其基本路径设置为www-root相对于Gruntfile 的目录,之后运行的任何任务都将能够访问它.

// Project configuration.
grunt.initConfig({
  connect: {
    server: {
      options: {
        port: 9001,
        base: 'www-root'
      }
    }
  }
});
Run Code Online (Sandbox Code Playgroud)


Dav*_*her 8

服务器任务的要点是对静态文件进行快速和脏访问以进行测试.grunt服务器不是生产服务器环境.它实际上只应在grunt生命周期中使用,以便将静态测试资产提供给测试环境.使用可能由NPM生命周期脚本控制的完整服务器用于生产环境.