【问题标题】:Grunt Watch Fatal error: listen EACCES and livereloadGrunt Watch 致命错误:监听 EACCES 和 livereload
【发布时间】:2014-05-05 11:45:38
【问题描述】:

电脑规格: Windows 7 企业版 x64

我在一个项目上运行 grunt.js,最近在尝试运行“grunt watch”时开始收到错误。

Grunt 昨天运行良好,但今天我开始看到:

运行“监视”任务 等待中...致命错误:监听 EACCES

我在这里读到另一个问题:Cloud 9 and Grunt.js

这导致我从 Gruntfile.js 中删除 'options: {livereload: true}'

再次运行手表按预期工作。有没有办法重新配置 grunt 或 livereload 以让 livereload 再次与 Grunt 一起工作?

此外,只需运行“grunt”命令即可运行所有任务而不会出错。

谢谢。

编辑:Gruntfile.js 如下:

module.exports = function(grunt) {
    grunt.initConfig({
        jshint: {
            all: ['js/src/*.js']
        },
        uglify: {
            options: {
                mangle: {
                    except: ['jQuery']
                },
                preserveComments: 'none'
            },
            'js/main.min.js': ['js/tmp/debug.js']
        },
        compass: {
            options: {
                config: '.compass.rb',
                sassDir: 'sass',
                cssDir: '.'
            },
            my_target: {
            }
        },
        cmq: {
            my_target: {
                files: { 'tmp': ['style.css'] }
            }
        },
        cssmin: {
            minify: {
                keepSpecialComments: 0,
                expand: true,
                cwd: 'tmp/',
                src: ['style.css'],
                dest: '.',
                ext: '.css'
            }
        },
        imagemin: {
            png: {
                options: {
                    optimizationLevel: 7
                },
                files: [{
                    expand: true,
                    cwd: 'img',
                    src: ['**/*.png'],
                    dest: 'img',
                    ext: '.min.png'
                }]
            },
            jpg: {
                options: {
                    progressive: true
                },
                files: [{
                    expand: true,
                    cwd: 'img',
                    src: ['**/*.jpg'],
                    dest: 'img',
                    ext: '.min.jpg'
                }]
            },
            gif: {
                options: {
                    progressive: true
                },
                files: [{
                    expand: true,
                    cwd: 'img',
                    src: ['**/*.gif'],
                    dest: 'img',
                    ext: '.min.gif'
                }]
            }
        },
        clean: ["tmp"],
        watch: {
            scripts: {
                files: 'js/src/*.js',
                tasks: ['jshint', 'concat', 'uglify', 'clean'],
                options: { livereload: true }
            },
            css: {
                files: 'sass/*.scss',
                tasks: ['compass', 'cmq', 'cssmin', 'clean'],
                options: { livereload: true }
            }
        },
            concat: {
            debug: {
                src: ['js/src/**/*.js'],
                dest: 'js/tmp/debug.js'
            }
        },
    });

    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-compass');
    grunt.loadNpmTasks('grunt-combine-media-queries');
    grunt.loadNpmTasks('grunt-contrib-cssmin');
    grunt.loadNpmTasks('grunt-contrib-clean');
    grunt.loadNpmTasks('grunt-contrib-imagemin');

    grunt.registerTask('default', ['jshint', 'concat', 'uglify', 'compass', 'cmq', 'cssmin', 'clean']);
}

【问题讨论】:

  • grunt 的哪个版本,grunt-contrib-watch 的哪个版本?
  • "grunt": "~0.4.2" "grunt-contrib-watch": "~0.5.3"
  • 你能发布你的 Gruntfile 吗?
  • 当然我会修改 OP

标签: javascript node.js gruntjs livereload


【解决方案1】:

您无权进行某些更改。

  1. 转到项目文件夹。
  2. 在项目文件夹中打开终端并执行以下命令。

    sudo chmod -R a+rwx ./
    

【讨论】:

    【解决方案2】:

    在我永无止境的辉煌中,我在一个单独的项目上运行了 fireapp。 fireapp 可以选择启用 livereload。

    最初当我问这个问题时,这是因为我在 Gruntfile.js 中有两个调用,正如 Kyle 正确推测的那样。这个解决方案对我不起作用,因为我仍然有两个不同版本的 livereload 运行,fireapp 正在监视一个单独的项目。

    Kyle 的第二个选项成功了。

    谢谢!

    【讨论】:

      【解决方案3】:

      您似乎有 2 个实时重载服务器配置为在同一个默认端口上生成。不要在手表配置中指定两次livereload: true,只需配置一次:

      watch: {
          options: { livereload: true },
          scripts: {
              files: 'js/src/*.js',
              tasks: ['jshint', 'concat', 'uglify', 'clean'],
          },
          css: {
              files: 'sass/*.scss',
              tasks: ['compass', 'cmq', 'cssmin', 'clean'],
          },
      },
      

      那么它只会产生 1 个实时重载服务器。

      另一种选择是创建一个专门用于实时重新加载的监视目标并监视您的目标文件:

      watch: {
          scripts: {
              files: 'js/src/*.js',
              tasks: ['jshint', 'concat', 'uglify', 'clean'],
          },
          css: {
              files: 'sass/*.scss',
              tasks: ['compass', 'cmq', 'cssmin', 'clean'],
          },
          lr: {
              options: { livereload: true },
              files: ['js/*.js', 'css/*.css'],
          },
      },
      

      【讨论】:

      • 谢谢,不过都没有解决问题。同样的错误。致命错误:听 EACCES
      • 没关系。解决了它。不情愿的自嘲式回答传入。
      猜你喜欢
      • 1970-01-01
      • 2016-10-23
      • 2013-10-16
      • 2014-01-25
      • 2013-05-20
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      相关资源
      最近更新 更多