Grunt Watch致命错误:听EACCES和livereload

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Grunt Watch致命错误:听EACCES和livereload相关的知识,希望对你有一定的参考价值。

PC规格:Windows 7 Enterprise 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']);
}
答案

您似乎有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'],
    },
},
另一答案

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

最初我问这个问题的原因是因为我在Gruntfile.js中有两次调用,正如凯尔正确推测的那样。这个解决方案对我来说不起作用,因为我仍然有两个单独版本的livereload运行fireapp,看着一个单独的项目。

凯尔的第二个选择就是诀窍。

谢谢!

另一答案

您无权进行某些更改。

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

以上是关于Grunt Watch致命错误:听EACCES和livereload的主要内容,如果未能解决你的问题,请参考以下文章

Gunrt开始,“致命错误:产生EACCES”

错误:听 EACCES:权限被拒绝 0.0.0.0:443

grunt test - 致命错误:尚未实施单元测试

致命错误:生成 ENOENT

致命错误:spawn cmd ENOENT -- grunt serve

Gulp 手表因 Spawn EACCES 错误而失败