javascript - 使用 grunt-contrib-connect 和 grunt-contrib-watch 实时重新加载

标签 javascript node.js gruntjs grunt-contrib-watch grunt-contrib-connect

我是 nodeJS 和 grunt 的新手。我在这个项目中有这个 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 检查我的代码时出现此错误并提出解决方案,我将不胜感激。

最佳答案

您的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
        }
    }
}

关于javascript - 使用 grunt-contrib-connect 和 grunt-contrib-watch 实时重新加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26032964/

相关文章:

javascript - 在目录中查找文件,扫描其他目录文件并替换所有出现的文件名

javascript - 带 setTimeout 的递归函数

javascript - 将文本 url 链接转换为可点击的链接

javascript - 如何在 Firefox Add-on SDK 中同时显示 2 个 sdk/面板?

node.js - 如何解决在 TeamCity 中创建 FileSet 时出现的 NAnt 错误?

node.js - 当我尝试将对象推送到 MongoDB 和 Nodejs 中的数组时,为什么会出现castError?

javascript - 等待 socket.on ('answerToRequest' ) 可以使用 Socket.io 吗?

javascript - 如何在 tampermonkey 中捕获状态 503

javascript - 如何用 usemin 替换指向 ui-router 版本文件的链接

javascript - React 和 Grunt - Envify NODE_ENV ='production' 和 UglifyJS