编辑:检查版本信息。现在grunt-contrib-watch
已经支持内置的livereload。
真是个难题。我也遇到了一些问题,所以让我尽力解释一下(或者至少让你可以使用它)。请记住,这是我设置的方式,并且大部分时间似乎都有效。
首先,您需要确保已将package.json
更新为正确的依赖项。我不确定livereload是否与内置的“watch”任务兼容,最近我一直在使用grunt-regarde。我的package.json通常如下所示:
"dependencies": {
"grunt": "~0.4.x",
"grunt-contrib-livereload": "0.1.2",
"grunt-contrib-connect": "0.2.0",
"grunt-regarde": "0.1.1"
},
显然你想要 grunt (duhhh),livereload,connect 似乎有助于挂载文件夹,regarde 就像 grunt-watch,只是它似乎更好用(我忘记了具体原因)。
如果你愿意,你可以通过在自己的 "devDependencies" 对象中指定 livereload 来使你的 package.json
更加完善。现在,运行你的老式好方法 npm install
,将这些好东西获取到你的项目中。
让我们来谈谈 gruntfiles:
正如你可能知道的那样,gruntfile 是使魔法发生的地方。在你的 gruntfile 底部的某个地方,你会想要指定
grunt.loadNpmTasks('grunt-regarde');
grunt.loadNpmTasks('grunt-contrib-livereload');
grunt.loadNpmTasks('grunt-contrib-connect');
在您的gruntfile顶部,我们需要添加一些用于实时重新加载的实用程序。在
/*global module:false*/
下面,继续添加
var lrSnippet = require('grunt-contrib-livereload/lib/utils').livereloadSnippet;
。
此后,您不需要真正学习connect,只需使用它。检查我的样式:
var folderMount = function folderMount(connect, point) {
return connect.static(path.resolve(point));
};
这段内容在module.exports = function(grunt) {
之前。
现在让我们来深入了解gruntfile的核心部分。我再次忘记connect在做什么,但这就是中间件魔法发挥作用的地方。在你的modules.exports中添加:
connect: {
livereload: {
options: {
port: 9999,
middleware: function(connect, options) {
return [lrSnippet, folderMount(connect, '.')]
}
}
}
},
现在我们想要监视文件。我喜欢设置几个不同的任务,因为我不想每次保存CSS文件时都运行整个grunt进程。以下是我使用的内容(再次添加到module.exports
):
regarde: {
txt: {
files: ['styles/*.css', 'index.html'],
tasks: ['livereload']
},
styles: {
files: ['sass/*.scss', 'sass/*/*.scss'],
tasks: ['compass']
},
templates: {
files: ['templates/*.jade'],
tasks: ['jade']
}
},
你可以看到,我只希望当我的编译后的 CSS 文件 (*.css
) 或编译后的 HTML 发生更改时,才触发 livereload。如果我编辑 SCSS 文件,则只想启动 compass。如果我编辑 jade 模板,则只想触发 jade 到 HTML 编译器。我想你能理解正在发生的事情。你可以玩弄它,但要聪明一点,因为你可能会陷入无限循环。
最后,你需要启动这些进程。我喜欢将它们全部绑定到我的主 grunt 任务中,因为我的 gruntfile 就是那么棒。
// Default task.
grunt.registerTask('default', ['livereload-start', 'connect', 'regarde']);
现在,在 CLI 中启动 grunt
后,你应该(希望如此,也许会,祈祷吧)得到类似下面的内容:
Running "connect:livereload" (connect) task
Starting connect web server on localhost:9999.
浏览到http://localhost:9999/yourpage.html
,看奇迹发生。
这里是完整的gruntfile。 这里是完整的package.json。