我正在学习如何推动使用 gruntjs。我找到了服务器任务,但我不明白这一点。
我可以使用服务器任务映射连接/缩小文件来测试我的应用程序(使用backbone.js),而无需在Web 服务器根目录中移动或放置源文件吗?例如,没有 apache。
如果不是,服务器任务的假定用途是什么?
该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);
});
该
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'
}
}
}
});
服务器任务的重点是对静态文件进行快速而肮脏的访问以进行测试。grunt server 不是生产服务器环境。它真的应该只在 grunt 生命周期中用于将静态测试资产引入测试环境。在生产环境中使用可能由 NPM 生命周期脚本控制的成熟服务器。