【发布时间】:2012-08-10 04:59:49
【问题描述】:
我正在学习如何推动使用 gruntjs。我找到了server task,但我不明白这一点。
我可以使用服务器任务映射连接/缩小文件来测试我的应用程序(使用backbone.js),而无需在Web 服务器根目录中移动或放置源文件吗?例如没有 apache。
如果不是,服务器任务的假设用途是什么?
【问题讨论】:
我正在学习如何推动使用 gruntjs。我找到了server task,但我不明白这一点。
我可以使用服务器任务映射连接/缩小文件来测试我的应用程序(使用backbone.js),而无需在Web 服务器根目录中移动或放置源文件吗?例如没有 apache。
如果不是,服务器任务的假设用途是什么?
【问题讨论】:
server 任务用于启动静态服务器,并将base 路径设置为 Web 根目录。
示例:将./web-root 用作http://localhost:8080/:
grunt.initConfig({
server: {
port: 8080,
base: './web-root'
}
});
它的功能类似于 Apache 服务器,根据路径提供静态文件,但使用 http module 通过connect 进行设置 (source)。
如果您需要它提供的不仅仅是静态文件,那么您可以考虑defining a custom server task:
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 个任务。
如果你想让它持久化服务器一段时间(以及咕噜声),你可以define the task as asynchronous(使用服务器的'close' event):
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);
});
【讨论】:
http://localhost:8080 的服务器(grunt server 命令)时,它很快就会退出并显示“任务完成”消息。
http.request() 或 request)。
grunt.registerTask("run", "server watch") 非常聪明。为什么不将此作为单独的答案,以便更明显?
server任务现在是connect任务,它包含在grunt-contrib-connect包中。
connect 任务启动一个连接网络服务器。
用这个命令安装这个插件:
npm install grunt-contrib-connect --save-dev
注意:
--save-dev包含您的devDependencies中的包,请参阅https://npmjs.org/doc/install.html
安装插件后,可以在 Gruntfile 中使用这行 JavaScript 启用它:
grunt.loadNpmTasks('grunt-contrib-connect');
使用grunt connect 命令运行此任务。
请注意,此服务器仅在 grunt 运行时运行。一旦 grunt 的任务完成,Web 服务器就会停止。可以使用keepalive 选项更改此行为,并且可以通过运行grunt connect:targetname:keepalive 之类的任务来临时启用此行为。 targetname 等于下面代码示例中的“服务器”。
在这个例子中,grunt connect(或者更详细一点,grunt connect:server)将在http://localhost:9001/ 启动一个静态 Web 服务器,其基本路径设置为相对于 Gruntfile 的 www-root 目录,并且任何任务都会运行之后就可以访问它了。
// Project configuration.
grunt.initConfig({
connect: {
server: {
options: {
port: 9001,
base: 'www-root'
}
}
}
});
【讨论】:
服务器任务的重点是快速而肮脏地访问静态文件以进行测试。 grunt server 不是生产服务器环境。它真的应该只在 grunt 生命周期中用于将静态测试资产引入测试环境。在生产环境中使用可能由 NPM 生命周期脚本控制的成熟服务器。
【讨论】: