我已經在Node.js中編寫了一個應用程序(使用Express & socket.io)和我想使用Grunt在開發和連接的同時使用livereload編譯客戶端的東西Node.js應用程序。我怎樣才能做到這一點?(由於路徑和跨域問題,最好不要在另一個端口運行Node.js應用程序,而在另一個端口運行客戶端)Grunt livereload與node.js應用程序
我也安裝了Yeoman,它使用開箱即用的grunt-contrib-livereload軟件包,但從我的理解它是如何使用Node.js連接服務器提供的客戶端文件,從而從我的Node.js應用程序分開..
例由約曼產生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'
]);
您是否在server.js中設置了服務器,如http.createServer(app).listen(8080)?如果你這樣做,並通過localhost:8080訪問應用程序,它不會重新加載客戶端文件,對吧?但是,如果你想訪問localhost:9000,那麼node.js應用程序不會從那裏回答,或者我做錯了嗎? :) – acoder 2013-03-27 18:16:01
不,我不設置http.createServer(應用程序)。我使用module.exports = app,當我執行require('./ server')時,它返回'app',這是一個快速應用程序(每個快速應用程序都是連接中間件)。 我只需訪問http:// localhost:9000上的整個應用程序。 – 2013-04-04 21:58:03
這是相當hackish,但我能夠得到nodejs +連接/ livereload +咕嚕玩好。 https://github.com/sheenobu/yo-nodejs-example/commit/663509d7d7e41004c402e322292a9a4b14122002 – 2013-04-04 23:00:00