Node.js (Express と socket.ioを使用) でアプリケーションを作成しました。Grunt を使用して、Node.js アプリケーションの開発と接続中に livereload でクライアント側のものをコンパイルしたいと考えています。これどうやってするの?(パスとクロスドメインの問題のため、別のポートで 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'
]);