Загрузите резюме с помощью приложения node.js
Я написал приложение в Node.js(с Express и socket.io) и . Я хотел бы использовать Grunt для компиляции моих клиентских файлов с помощью функции reneload при разработке и подключении к Node.js. Как я могу это сделать? (желательно без запуска приложения Node.js в другом порту и клиенте в другом порту из-за проблем с путями и междоменами)
Я установил также Yeoman, и он использовал из коробки пакет grunt-contrib-livereload, но из того, что я понял, используя Node.js Подключить сервер для обслуживания файлов на стороне клиента, отделяя его от моего Node.js.
Пример из Gruntfile.js, созданного Yeoman:
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'
]);
Ответы
Ответ 1
Не уверен, что вы еще решили этот вопрос, но я это сделал, добавив мое экспресс-приложение в качестве промежуточного программного обеспечения, подключенного к опции connect.livereload.options.middleware.
Однако автоматическая перезагрузка серверного кода не работает. Для этого вы можете реализовать перезагружаемый сервер, используя простой "node./server.js", создайте промежуточное программное обеспечение для подключения, которое будет действовать как прозрачный прокси-сервер для вашего сервера разработки и вызовет его в вашем файле 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
];
}
}
}
}
server.js:
var app = express();
...
// Export your server object.
module.exports = app;
Ответ 2
В моем ответе используется Gulp
, с которым я больше знаком, вместо Grunt, но я предполагаю, что такой же подход будет работать и с Grunt
.
Смотрите мой репозиторий (и более старый) и мой другой ответ.
Ни одно расширение браузера, ни добавление каких-либо script к вашим файлам не требуется.
Решение основано на gulp-livereload
и connect-livereload
, работающих вместе. Во-первых, вы запускаете свой прослушиватель перезагрузки в реальном времени и вносите в него любые изменения файла (измените *
на более конкретный node-glob
, чтобы прослушать только для определенных файлов):
var gulpLivereload = require('gulp-livereload');
gulpLivereload.listen();
gulp.watch('*', function(file) {
gulp.src(file.path)
.pipe(gulpLivereload());
});
Во-вторых, вы настраиваете свой сервер для использования слушателя в качестве промежуточного программного обеспечения через connect-livereload
:
var connect = require('connect');
var connectLivereload = require('connect-livereload');
connect()
.use(connectLivereload())
.use(connect.static(__dirname))
.listen(8080);
См. пакеты для получения дополнительной информации о том, как они работают внутри.
Ответ 3
В Gruntfile удалите задачу connect:livereload
и open
из server
.
Добавьте в файл HTML следующий script
<!-- livereload script -->
<script type="text/javascript">
document.write('<script src="http://'
+ (location.host || 'localhost').split(':')[0]
+ ':35729/livereload.js?snipver=1" type="text/javascript"><\/script>')
</script>