Grunt-contrib-watch用grunt-contrib-connect

不幸的是, grunt-contrib-watch和grunt-contrib-connect似乎并不好。

在grunt-contrib-connect 自述文件中说:

请注意,此服务器只在运行grunt时才运行。 一旦咕噜的任务完成,Web服务器停止。 这种行为可以通过Keepalive选项来改变,并且可以通过运行像grunt connect :: keepalive这样的任务来启用ad-hoc。

精细。 但是如果我想与连接服务器一起运行我的监视任务呢? 像这样:

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中,但没有办法用一个命令来运行它们吗?

grunt-contrib-watch中的 livereload通知下方端口的文件更改,您可以看到它是在35729。

另一方面, grunt-contrib-connect中的livereload监听端口35729的变化。

所以我们应该把它们configuration成 –

 connect: { server: { options: { port: 8000, hostname: 'localhost', livereload: 35729 } } }, watch: { options: { livereload: 35729 }, files: ['**'], tasks: [] } 

你不需要在这里提供“连接”作为一项任务。 由于重装的工作是由livereload在这里完成的。 现在为了使这两个工作与一个单一的命令,我们将他们注册为 –

 grunt.registerTask("server", ["connect", "watch"]); 

现在连接运行,然后运行。 现在通常registerTasks通过完成第一个任务然后第二个任务等工作。 但是由于你所说的连接行为,

请注意,此服务器只在运行grunt时才运行

连接只运行一次。 但手表将继续运行寻找变化(保持运行),从而保持连接服务器。

现在当你尝试

 grunt server 

事情就像魅力一样工作。

我使用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来加载一个静态的静态express服务器:

 var express = require('express'); var server = express(); // better instead server.configure(function(){ server.use(express.static(__dirname + '/public')); }); server.listen(3000);