不幸的是,grunt-contrib-watch和grunt-contrib-connect似乎并不好看。
在grunt-contrib-connect readme上,它说:
请注意,只要grunt正在运行,此服务器就会运行。一旦grunt的任务完成,Web服务器就会停止。可以使用keepalive选项更改此行为,并且可以通过运行grunt connect :: keepalive等任务来临时启用。
精细。但是,如果我想与连接服务器一起运行我的监视任务呢?像这样:
connect: {
server: {
options: {
port: 8000,
hostname: 'localhost',
keepalive: true
}
}
},
watch: {
options: {
livereload: true
},
files: ['**'],
tasks: ['connect'],
}
此处,connect
任务在文件更改时运行。如果我将connect的keepalive
选项设置为true,那么grunt-contrib-watch将停止观看,因为技术上尚未完成任务。如果我伪造keepalive
选项,则连接服务器在完成任务后就会死亡。
是的,我可以运行命令......
$ grunt connect
$ grunt watch
...在单独的shell中,但是没有办法用一个命令运行它们吗?
答案 0 :(得分:3)
grunt-contrib-watch 中的Livereload通知下面某个端口的文件更改,您可以看到它位于35729.
另一方面, grunt-contrib-connect 中的livereload侦听端口35729的更改。
所以我们应该将它们配置为 -
connect: {
server: {
options: {
port: 8000,
hostname: 'localhost',
livereload: 35729
}
}
},
watch: {
options: {
livereload: 35729
},
files: ['**'],
tasks: []
}
您无需在此处提供“connect”作为任务。由于重新加载的工作是通过livereload在这里完成的。 现在使用单个命令使这两个命令工作,我们将它们注册为 -
grunt.registerTask("server", ["connect", "watch"]);
现在运行连接,然后运行watch。现在通常registerTasks通过完成第一个任务然后完成第二个任务来工作,依此类推。但是由于你所说的连接行为 -
请注意,只要grunt正在运行,此服务器就会运行
Connect只运行一次。但是Watch会继续运行以寻找变化(保持咕噜声运行),从而保持连接服务器的正常运行。
现在尝试
grunt server
事情会像魅力一样发挥作用。
答案 1 :(得分:0)
我使用grunt-nodemon,它将watch和nodejs启动器封装在一个任务中:
nodemon: {
dev: {
script: 'app.js',
options: {
ignore: [
'node_modules/**',
'public/**'
],
ext: 'js'
}
}
}
然后执行:
$ grunt nodemon:dev
现在,nodemon只使用nodejs启动app.js脚本,因此您需要一个小的app.js来加载静态静态快速服务器:
var express = require('express');
var server = express(); // better instead
server.configure(function(){
server.use(express.static(__dirname + '/public'));
});
server.listen(3000);