参考这篇有关如何使用npm作为构建工具的优秀文章,我希望在构建nodejs express web应用程序时实现它。
我的node应用程序创建于端口8080,这是我server.js
文件的简化版本:
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
作为构建工具,在使用npm启动server.js
之前,我会启动一个单独的进程,执行watchify source/js/app.js -v -o wwww/js/bundle.js
命令。
我确认了watchify可以正确工作,它能够在我保存文件时更新。但是一旦文件被更改,就没有livereload了。
控制台中显示的错误是:Uncaught SyntaxError: Unexpected token <
,我可以看到connect-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>
我也尝试使用原文中提到的自动刷新,但没有成功。我不确定是否使用正确的插件,因为当我已经用express启动了一个服务器时,
live-reload
还会再次启动一个服务器。你有什么想法吗?