62

我正在学习如何推动使用 gruntjs。我找到了服务器任务,但我不明白这一点。

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

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

4

3 回答 3

81

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

示例:./web-root充当http://localhost:8080/

grunt.initConfig({
  server: {
    port: 8080,
    base: './web-root'
  }
});

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

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

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

和自定义服务器实例:

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

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

连接和缩小有它们自己的专用任务 -concat并且min- 但可以与server完成所有 3 个任务的任务一起使用。


编辑

如果你想让它持久化服务器一段时间(以及咕噜声),你可以将任务定义为异步的(使用服务器的'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);
});
于 2012-08-13T23:46:58.817 回答
54

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

connect任务启动连接 Web 服务器。

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

npm install grunt-contrib-connect --save-dev

注意:--save-dev包含在你的包devDependencies,见https://npmjs.org/doc/install.html

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

grunt.loadNpmTasks('grunt-contrib-connect');

使用命令运行此任务grunt connect

请注意,该服务器仅在 grunt 运行时运行。一旦 grunt 的任务完成,Web 服务器就会停止。可以使用该选项更改此行为keepalive,并且可以通过运行类似grunt connect:targetname:keepalive. targetname等于下面代码示例中的“服务器”。

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

// Project configuration.
grunt.initConfig({
  connect: {
    server: {
      options: {
        port: 9001,
        base: 'www-root'
      }
    }
  }
});
于 2013-08-08T07:23:04.560 回答
8

服务器任务的重点是对静态文件进行快速而肮脏的访问以进行测试。grunt server 不是生产服务器环境。它真的应该只在 grunt 生命周期中用于将静态测试资产引入测试环境。在生产环境中使用可能由 NPM 生命周期脚本控制的成熟服务器。

于 2012-12-27T02:38:25.517 回答