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);