module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
server: {
port: 8888,
base: '.'
}
});
};
C:\Program Files\nodejs\test\grunt>
C:\Program Files\nodejs\test\grunt>grunt server
Running "server" task
Starting static web server on port 8888.
完成,没有错误。
但无法通过输入[http://127.0.0.1:8888][1] in browsers ! jiong~
如何在windows或unix中修复此问题?
答案 0 :(得分:26)
在grunt 0.4与grunt-contrib-connect结合使用时,您可以使用keepalive
参数运行长时间运行的服务器:grunt connect:target:keepalive
或将其定义为配置中的选项:
grunt.initConfig({
connect: {
target:{
options: {
port: 9001,
keepalive: true
}
}
}
});
答案 1 :(得分:5)
请勿使用grunt为您的项目提供服务。 Grunt是一个构建工具。相反,请使用npm生命周期脚本。
server.js
var express = require("express"),
app = express();
app.use('/', express.static(__dirname));
app.listen(8888);
package.json
{
"name": "my-project",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "3"
}
}
现在你可以运行npm start
,生活会很棒。 Grunt是一个构建工具,而不是服务器。 npm是包生命周期管理器,而不是构建工具。 Express是一个服务器库。在正确的位置使用每个。
此规则的例外情况是,当您需要将项目提供给构建堆栈中的其他测试工具时。 grunt-contrib-connect
插件专门针对此用例而设计,并具有keepalive
配置设置,可在提供静态文件时保持打开状态。这通常与在测试或代码更改时运行测试套件的watch
任务一起使用。
答案 2 :(得分:4)
server
任务只在需要时运行,但您可以防止它退出。从另一个问题的a comment到widget:在grunt.js
文件中定义一个名为run
的任务,该任务运行任务server
和watch
。< / p>
grunt.registerTask("run", "server watch");
watch
任务无限期运行,因此会阻止server
任务结束。只需确保您还有watch
任务的配置。这是grunt.js
文件中的所有内容:
module.exports = function (grunt) {
// …
grunt.initConfig({
// …
watch: {
files: "<config:lint.files>",
tasks: "lint qunit",
},
// …
});
grunt.registerTask("run", "server watch");
};
从命令行输入:
$ grunt run
服务器将保持运行状态。
或者,正如@NateBarr指出的那样,您可以从命令行运行:
$ grunt server watch
答案 3 :(得分:0)
默认情况下,Grunt启动服务器只是为了测试(或任何其他要求的任务..),一旦完成就退出....
但幸运的是我找到了一个解决方案,通过将添加到您的grunt.js
文件中,您可以(可选)暂停服务器退出。
grunt.registerTask('wait', 'Wait for a set amount of time.', function(delay) {
var d = delay ? delay + ' second' + (delay === '1' ? '' : 's') : 'forever';
grunt.log.write('Waiting ' + d + '...');
// Make this task asynchronous. Grunt will not continue processing
// subsequent tasks until done() is called.
var done = this.async();
// If a delay was specified, call done() after that many seconds.
if (delay) { setTimeout(done, delay * 1000); }
});
然后在命令行中调用它:grunt server wait
然后您应该能够在浏览器中看到它..
确保将其添加到module.exports = function(grunt){...}