我只使用Grunt进行livereload。它工作正常,但我注意到它有很高的CPU,当我用“--verbose”运行它时,我看到它正在观察整个“node_modules”文件夹。
所以,我做了一些研究,并试图忽略这一点。不幸的是,没有成功。
我的“gruntfile.js”部分是:
// the watch stuff ..
watch: {
all: {
files: ['!**/node_modules/**', 'js/**/*.js', 'css/**/*.css', 'index.html'],
options: {
interval: 5007,
livereload: true
}
}
},
基本上我说我想要grunt来观看所有的js,css和index.html文件。明确添加了忽略“node_modules”的代码,但它仍然表示正在观察它并且CPU大约30%。 (Mac OSx)
==================
我注意到了一件事:
当我在“gruntfile.js”中进行更改时 - 例如在“watch”任务的“files”属性中再添加一个文件 - 然后重新启动grunt,在控制台中我看到它开始观看只有我想要的文件,然后CPU低于1%。 (我想这应该是最初的原因。)
我做错了什么?
====================
编辑:不幸的是,当我更改gruntfile并且我看到只有我想要的文件被观看时 - 那么livereload的东西不再有效。
====================
这是我开始的文章: http://thecrumb.com/2014/03/15/using-grunt-for-live-reload/
这是我的package.json文件:
{
"name": "grunt-reload",
"version": "1.0.0",
"devDependencies": {
"grunt": "~0.4.3",
"matchdep": "~0.3.0",
"grunt-express": "~1.2.1",
"grunt-contrib-watch": "~0.6.0",
"grunt-open": "~0.2.3"
}
}
这是我的Gruntfile.js:
module.exports = function(grunt) {
require('matchdep')
.filterDev('grunt-*')
.forEach(grunt.loadNpmTasks);
grunt.initConfig({
// the web server ..
express: {
all: {
options: {
bases: [__dirname],
port: 8888,
hostname: 'localhost',
livereload: true
}
}
},
// the watch stuff ..
watch: {
all: {
files: ['js/**/*.js', 'css/**/*.css', 'index.html'],
options: {
livereload: true
}
}
},
// the automatic opening stuff ..
open: {
all: {
path: 'http://localhost:8888/index.html'
}
}
});
// create the server task ..
grunt.registerTask(
'server',
['express', 'open', 'watch']
);
}; // end of "module.exports" ..
我用“grunt服务器”开始这一切。
答案 0 :(得分:1)
编辑:共享Gruntfile后,问题变得更加清晰。
在您的grunt-express
配置中,您已将livereload
设置为true
而将bases
设置为__dirname
,即Gruntfile
中的文件夹{}从
现在,让我们看一下grunt-express
文档:
<强>碱强>
类型:字符串|数组默认值:null
将从中提供静态文件的基(或根)目录。将为每个基数条目生成connect.static()。 当livereload设置为true(或设置为特定端口号)时,将为您创建一个监视任务(在运行时)以观察您的basePath /**/*.*。
(强调我的)
因此,在grunt-express
配置中,您可以设置livereload
以查看基本路径中的所有文件,其中包括node_modules
。
您有几种选择:
相应地删除您的其他watch
任务和配置grunt-expresses
基本路径(基本上只复制其他配置)。
保留两项监视任务,忽略其他node_modules
配置中的grunt-express -> bases
。
删除bases
并处理其他watch
任务中的实时重载
node_modules
文件夹位于何处?如果它在root上,只要没有任何匹配的glob模式,你就可以完全删除node_modules
参数:
// the watch stuff ..
watch: {
all: {
files: ['js/**/*.js', 'css/**/*.css', 'index.html'],
options: {
interval: 5007,
livereload: true
}
}
},
现在您正在观看:所有.js
- js
文件夹下的文件,根目录下的index.html
等等。
但是,如果node_modules
下有js/node_modules
,则可以明确忽略该文件夹及其中的文件:
files: ['!js/node_modules/**', 'js/**/*.js', 'css/**/*.css', 'index.html'],
无论如何,根据您的Gruntfiles和node_module
- 文件夹位置,您的配置应该可以正常工作。