javascript - Grunt 服务器错误,EMFILE

标签 javascript gruntjs grunt-contrib-watch

每当我执行“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/

相关文章:

javascript - 停止发送 Facebook javascript api 调用

gruntjs - gulp能否完全替代grunt?

javascript - 使用 grunt-contrib-watch 深度单向同步两个目录。代码有效,但 grunt-contrib-watch 重新初始化时间太慢

javascript - 使用 AJAX 和 PHP 将多个按钮的点击次数保存到文件中

javascript - 在导航栏上更改 'current' 类

html - CSS 后处理器将文件分成两半

node.js - 如何在 Cucumber JS 中只看到错误的 header ?

javascript - Grunt 不观察 JS 文件

angularjs - 当文件用 grunt 更改时自动打开浏览器并重新加载它

javascript - 根据下拉选择检索数据