每当我执行“grunt server”时,它都会自动给出此错误:
Running "watch" task
Waiting...
Warning: EMFILE, too many open files
接下来是:
(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral.
我在网上看到的常见修复方法是更改名称,如下所示:
grunt.registerTask('uglify', ['jshint', 'uglify']);
grunt.registerTask('myuglify', ['jshint', 'uglify']);
虽然我的问题无法用这种方法解决,因为我没有使用与任务相同的名称。
我的 gruntfile.js:
module.exports = function(grunt){
grunt.initConfig({
sass: {
dist: {
files: {
'styles/css/main.css': 'styles/sass/main.scss'
}
}
}
,watch: {
options:{livereload:true},
sass:{
files:'styles/sass/*.scss',
tasks:'sass'
}
},
express:{
all:{
options:{
port:9000,
hostname:'localhost',
bases:'.',
livereload:true
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-express');
grunt.registerTask('default', ['sass'])
grunt.registerTask('server',['express','watch'])
}
有什么想法吗?
最佳答案
我今天遇到了这个浪费时间的错误,GitHub 存储库上的解决方案对我不起作用。在搜索与 process.nextTick
弃用警告相关的问题后,我得出的结论是,运行依赖于监视文件/glob 的任务是一个潜在原因。
这是我网站的 Gruntfile:
module.exports = function (grunt) {
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
watch: {
dev: {
files: ['**/*.js', 'public/stylesheets/**/*.scss'],
tasks: ['express:dev'],
options: {
spawn: false
}
}
},
express: {
dev: {
options: {
script: 'server.js',
node_env: 'development'
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-express-server');
grunt.registerTask('default', ['express:dev', 'watch']);
};
我通过从 watch
任务中删除 js 文件解决了该问题,这会重新启动 Express。上述任务的以下配置对我来说效果很好:
watch: {
dev: {
files: ['public/stylesheets/**/*.scss'],
tasks: ['express:dev'],
options: {
spawn: false
}
}
},
This SO answer提供了类似的修复。有趣的是,我在 Ubuntu 机器上从未遇到过这个问题;今天当我克隆我的存储库时,它发生在我的 MacBook 上。
关于javascript - Grunt 服务器错误,EMFILE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26105995/