2015-06-24 8 views
3

После this отличная статья о том, как использовать npm в качестве инструмента сборки, я хотел бы реализовать его при создании веб-приложения nodejs express. приложение Мой узел создается на порт 8080, это упрощенная версия моего server.js файла:Использование connect-livereload в приложении Express node

var env = process.env.NODE_ENV 

var path = require('path'); 
var express = require('express'); 
var logger = require('morgan'); 

var routes = require('./routes'); 

var app = express(); 

app.set('port', process.env.PORT || 8080); 
app.set('views', __dirname + '/views'); 
app.set('view engine', 'jade'); 
app.engine('jade', require('jade').__express) 

var Oneday = 86400000; 
app.use(express.static(__dirname + '/www', { 
    maxAge: env == 'development' ? 0 : Oneday 
})); 

app.use(logger('dev')); 

app.use(express.static(path.join(__dirname, '/public'), { 
    maxAge: env == 'development' ? 0 : Oneday 
})) 

if (env == 'development') { 
    // var liveReloadPort = 9091; 
    app.use(require('connect-livereload')({ 
     port: 8080 
     // src: "js/" 
      // port: liveReloadPort 
    })); 
} 

routes.blog(app); 
routes.frontend(app, passport); 

app.use(function(err, req, res, next) { 
    console.log(err.stack); 
    res.status(500).send({ 
     message: err.message 
    }) 
}); 

app.listen(app.get('port')); 
console.log('Server starting on port: ' + app.get('port')); 

Файл, который я наблюдал до необходимости перезагрузки в www/js. Я использую npm как инструмент построения и перед запуском server.js с npm Я запускаю отдельный процесс, который делает watchify source/js/app.js -v -o wwww/js/bundle.js Я проверил, что watchify работает правильно, обновляясь при сохранении моих файлов. Но после того, как файл был изменен, нет никакой нагрузки на печень. Я получаю ошибку в консоли: Uncaught SyntaxError: Unexpected token < и я могу видеть, что соединить-LiveReload вставить этот скрипт в HTML:

<script> 
//<![CDATA[ 
document.write('<script src="//' + (location.hostname || 'localhost') + ':8080/livereload.js?snipver=1"><\/script>') 
//]]> 
</script> 
<script src="//localhost:8080/livereload.js?snipver=1"> </script> 

Я пытался также использовать live-reload, как упоминалось в оригинальной статье, но без успеха и я не уверен, что это правильный плагин для использования, поскольку live-reload запускает сервер, когда я уже запускаю его с помощью express. Любые идеи?

ответ

3

connect-livereload только вставляет скрипт в html (так что вам не нужен плагин для браузера).

Вам по-прежнему нужен отдельный сервер загрузки, попробуйте node-livereload, grunt-contrib-connect или grunt-contrib-watch ... так как вы хотите использовать npm как инструмент сборки, первый должен быть рекомендован.

тогда вам придется изменить порт LiveReload к порту сервера с LiveReload (по умолчанию порт 35729):

app.use(require('connect-livereload')({ 
    port: 35729 
    })); 

Сервера вы пробовали: LiveReload должны работать.

Вы можете попытаться запустить его с:

live-reload [<path>...] --port=35729 --delay=someDelay 

и изменить опцию подключения-LiveReload к:

app.use(require('connect-livereload')({ 
    src: "localhost:35729" 
    })); 
+0

Спасибо. Вы ведете меня к решению. То, что было разрешено, начинается с 'live-reload --port 9091 www/js /', и тот же самый порт, который я указываю здесь, является тем, который я использую в connect-livereload 'app.use (require ('connect-livereload') ({ порт: 9091 })); ' – Bondifrench

+0

@Bondifrench рад, что это помогло. – andineck