c9:grunt-watchify抛出错误“致命错误:观看EMFILE”

时间:2014-12-29 11:25:07

标签: gruntjs cloud9-ide

我有c9工作区,我正在使用grunt-watchify运行grunt来自动创建捆绑文件。当我突然得到这个错误(grunt-watchify上的调试是真的)时它工作正常:

./app/js/controller.js [ [ '.', 'app', 'js', 'controller.js' ] ]
./app/js/controller.js [ [ '.', 'app', 'js', 'controller.js' ] ]
stat [ '/home/ubuntu/workspace',
  './app/js/controller.js',
  '=',
  './app/js/controller.js' ]
emit! match
matches[0] = { './app/js/controller.js': true }
emitting end [ './app/js/controller.js' ]
emit! end
Fatal error: watch EMFILE

现在它无法正常工作。如果我将watchify更改为browserify,则可以正常工作。

这是我的Gruntfile.js:

module.exports = function(grunt) {
grunt.initConfig({
    pkg: grunt.file.readJSON('package.json'),
    compass: {
        dist: {
            options: {
                appDir: 'app/',
                //sassDir: 'sass',
                //cssDir: 'app/stylesheets'
            }
        },
        dev: {
            options: {
                appDir: 'app/',
                watch: true
            }
        }
    },
    concurrent: {
        dev: 
            ['watch', 'compass:dev']
    },
    watchify: {
      dev: {
        src: './app/js/controller.js',
        dest: 'app/bundle.js',
        debug: true
      },
    },
    watch: {
        css: {
            files: '**/*.scss',
            tasks: ['compass']
        },
        app: {
            files: 'app/js/bundle.js',
            options: {
              livereload: true
            }
        }
    },
    browserify: {
        dist: {
            files: {
                'app/bundle.js': [
                    'app/js/*.js',
                    ]
            }
        },
   },
   bower: {
     install: {
       //just run 'grunt bower:install' and you'll see files from your Bower packages in lib directory
     },
     options: {
        targetDir: './app/lib'
     }
   }
});
grunt.loadNpmTasks('grunt-concurrent');
grunt.loadNpmTasks('grunt-contrib-compass');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-browserify');
grunt.loadNpmTasks('grunt-watchify');
grunt.loadNpmTasks('grunt-bower-task');
grunt.registerTask('default',['bower:install', 'watchify', 'concurrent']);
grunt.registerTask('heroku',['compass:dist', 'browserify', 'bower:install']);

}

1 个答案:

答案 0 :(得分:0)

EMFILE表示打开的文件太多。这很可能是由仍在运行的进程引起的,并且以某种方式打开了许多文件。您可以使用" ps aux"检查正在运行的进程。在Cloud9中,您也可以通过“工具”菜单(工具>流程管理器)在流程管理器中看到这一点。如果您发现任何看起来可疑的进程(例如节点进程正在运行),您可以通过进程管理器UI或键入" kill"哪个是要杀死的进程的进程ID。之后,您应该能够在没有EMFILE错误的情况下再次运行grunt。 (假设grunt本身不会导致问题)。