4

私はnodeJSとうなり声が初めてです。このプロジェクトにこの Gruntfile があり、新しい変更を検出するためにブラウザーを常に更新する必要がないように、プロジェクト内のすべての html ファイルに対してライブ リロードを実行したいと考えています。どういうわけか、次のコードでエラーが発生します。

module.exports = function (grunt)
{
    // Project configuration.
    grunt.initConfig(
    {
        // Task configuration.
        jshint:
        {
            options:
            {
                curly: true,
                eqeqeq: true,
                immed: true,
                latedef: true,
                newcap: true,
                noarg: true,
                sub: true,
                undef: true,
                unused: true,
                boss: true,
                eqnull: true,
                browser: true,
                globals: {}
            },
            gruntfile:
            {
                src: 'Gruntfile.js'
            },
            lib_test:
            {
                src: ['lib/**/*.js', 'test/**/*.js']
            }
        },
        connect:
        {
            server:
            {
                options:
                {
                    hostname: 'localhost',
                    port: 80,
                    base: 'src',
                    keepalive: true,
                    livereload: true
                }
            }
        },
        watch:
        {
            options:
            {
                livereload:true
            }
        }

    });

    // These plugins provide necessary tasks.
    grunt.loadNpmTasks('grunt-contrib-connect');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');

    // Default task.
    grunt.registerTask('default', ['connect', 'watch']);


};

「grunt default」を開始すると、接続中にキープアライブであるため、タスクウォッチが実行されないようです。

JSHint がコードをチェックし、これに対する解決策を提案するときに、なぜこのエラーが発生するのかを説明していただければ幸いです。

4

2 に答える 2

6

あなたのwatchタスクには、タスクまたはファイルがありません。で動作させるには、次のようgrunt-contrib-connectにオプション以上のものを含める必要があります。livereload

watch: {
    options: {
        livereload: true
    },
    taskName: {    // You need a task, can be any string
        files: [   // Files to livereload on
            "app/js/*.js",
            "app/templates/*.html"
        ]
    }
}

または代わりに:

watch: {
    taskName: {
        options: { // Live reload is now specific to this task
            livereload: true
        },
        files: [   // Files to livereload on
            "app/js/*.js",
            "app/templates/*.html"
        ]
    }
}

ここで glob パターンに一致するすべてのファイルは、期待どおりに機能するはずです。tasksブラウザ用にライブ リロードするだけの場合は、ここでパラメータを指定する必要はありません。

また、connectサーバーを と一緒watchに使用する場合は、keepalive パラメータを削除する必要があります。これはブロッキング タスクであり、watchタスクの実行を妨げる可能性があるためです。

connect: {
    server: {
        options: {
            port: 8080,
            base: 'src',
            livereload: true
        }
    }
}
于 2014-10-22T16:07:52.483 に答える
0

jshint の設定が必要です。node:trueこの例の.jshintrcを見てください。

監視と livereload については、監視するファイルと Gruntfile で実行するタスクを指定する必要があります。このサンプルGruntfileをもう一度見てください。

たとえば、次のようにします。

 watch: {
      coffee: {
        files: ['<%%= config.app %>/scripts/{,*/}*.{coffee,litcoffee,coffee.md}'],
        tasks: ['coffee:dist']
      },
    }

この例では、グロブをfilesオプションとして指定し、そのファイルが変更されるたびに、それに応じたタスクが実行されます。

于 2014-09-25T07:56:11.463 に答える