使用node.js应用程序的Grunt livereload

aco*_*der 15 node.js gruntjs yeoman livereload

我在Node.js中编写了一个应用程序(使用Express和socket.io),我想在开发和连接到Node.js应用程序时使用Grunt编译我的客户端内容.我怎样才能做到这一点?(最好不要在另一个端口运行Node.js应用程序,而在另一个端口运行客户端,因为路径和跨域问题)

我也安装了Yeoman,它使用开箱即用的grunt-contrib-livereload包,但据我所知,它使用Node.js Connect服务器来提供客户端文件,因此与我的Node.js应用程序分开.

Yeoman生成的Gruntfile.js示例:

var lrSnippet = require('grunt-contrib-livereload/lib/utils').livereloadSnippet;
var mountFolder = function (connect, dir) {
    return connect.static(require('path').resolve(dir));
};

// ... cut some parts
grunt.initConfig({
    watch: {
        livereload: {
            files: [
                '<%= yeoman.app %>/*/*.html',
                '{.tmp,<%= yeoman.app %>}/styles/*.css',
                '{.tmp,<%= yeoman.app %>}/scripts/*.js',
                '<%= yeoman.app %>/images/*.{png,jpg,jpeg}'
            ],
            tasks: ['livereload']
        }
        // ..cut some parts
    },
    connect: {
        livereload: {
            options: {
                port: 9000,
                middleware: function (connect) {
                    return [
                        lrSnippet,
                        mountFolder(connect, '.tmp'),
                        mountFolder(connect, 'app')
                    ];
                }
            }
        }
    }
    // ..cut some parts
});

grunt.registerTask('server', [
    'clean:server',
    'coffee:dist',
    'compass:server',
    'livereload-start',
    'connect:livereload',
    'open',
    'watch'
]);
Run Code Online (Sandbox Code Playgroud)

She*_*rip 7

不确定你是否已经解决了这个问题,但我已经通过添加我的快速应用程序作为附加到'connect.livereload.options.middleware'选项的中间件来完成此操作.

但是,服务器端代码的自动重新加载不起作用.为此,您可以使用简单的"node ./server.js"实现重载友好服务器,创建一个连接中间件,充当开发服务器的透明代理,并在标准连接/ livereload之前在Gruntfile.js中调用它服务器启动.

connect: {
    options: {
        port: 9000,
        // change this to '0.0.0.0' to access the server from outside
        hostname: 'localhost'
    },
    livereload: {
        options: {
            middleware: function (connect) {
                return [
                    lrSnippet,
                    mountFolder(connect, '.tmp'),
                    mountFolder(connect, 'app'),
                    require('./server') // your server packaged as a nodejs module
                ];
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

server.js:

var app = express();

...
// Export your server object.
module.exports = app;
Run Code Online (Sandbox Code Playgroud)