我已阅读了关于chokidar的一些问题和答案,但是我仍然难倒了......所以真的很感谢能调试我的特定片段的任何人。所需节点/快递模块不与chokidar更新?
我在localhost:3000上运行一个基本的Express节点应用程序。
入口点是app.js:
const express = require('express');
const path = require('path');
const favicon = require('serve-favicon');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const clearRequire = require('clear-require');
const production = process.env.NODE_ENV === 'production';
const app = express();
// config nunjucks
const nunjucks = require('nunjucks');
nunjucks.configure('views', {
autoescape: true,
watch: true,
nocache: true,
express: app
});
// Routes for Express into modules
var index = require('./routes/index');
var game = require('./routes/game');
if (!production) {
const chokidar = require('chokidar');
const watcher = chokidar.watch('./routes');
watcher
.on('ready',() => console.log('Scan complete. Ready for changes.'))
.on('change', path => {
var clearPath = "./" + path.split(".")[0];
clearRequire(clearPath);
});
}
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'njk');
// uncomment after placing your favicon in /public
app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', index);
app.use('/game', game);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error', { test: 'test'});
next();
});
module.exports = app;
和./routes/game.js内:
var express = require('express');
var router = express.Router();
/* GET game page. */
router.get('/', function(req, res) {
res.render('game', { title: 'Game', also: 'test-4' });
});
module.exports = router;
更新game.js(例如,改变 “测试-4” 到“测试-5“)对应用程序没有影响,无需重新启动服务器。我曾假设chokidar会允许我更新game.js,并在下一页加载时反映这些变化?
供参考game.njk模板看起来是这样的:
{% extends "app.njk" %}
{% block pageContent %}
<div id="pageContent" class="container">
This. is. game. {{ also }}
</div><!-- /#pageContent .container -->
{% endblock pageContent %}
如果我更新模板,它会立即更新(按照nunjucks观看:真实的说明),但是,也VAR更新没有运气。
感谢您的帮助。
嘿感谢这么多这一点。我已经开始尝试使用nodemon而不是chokidar,但是当我启动它时,它并没有正确运行服务器,直到我意识到express已经从bin/www开始应用程序(您的文章促使我探索并最终确定) –
很高兴帮助您,与nodemon玩得开心!它真的是要走的路! –