Загрузите резюме с помощью приложения 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>