【发布时间】:2016-05-10 22:38:45
【问题描述】:
我有一个简单的 express 4.x 测试应用程序。我知道您可以使用 gulp 来受益于自动重新加载,因此在更改服务器上的任何内容后,它会自动重新启动。
我设法用 express 设置了车把模板引擎。
我的文件系统很简单:
- app/main.js -> 是服务器
- app/gulp.js -> 是 gulp 文件
- app/views/*.hbs -> 包含我的 handlebars 文件
- app/views/layouts/*.hbs -> 包含我的 handlebars 布局文件
我正在使用gulp-live-server,但我感觉我错过了一些东西(只看了几个教程来了解 gulp 是什么)
app/gulp.js - gulp-live-server的第二个例子
var gulp = require('gulp');
var gls = require('gulp-live-server');
gulp.task('serve', function() {
//1. run your script as a server
var server = gls.new('main.js');
server.start();
//2. run script with cwd args, e.g. the harmony flag
var server = gls.new(['--harmony', 'main.js']);
//this will achieve `node --harmony main.js`
//you can access cwd args in `main.js` via `process.argv`
server.start();
//use gulp.watch to trigger server actions(notify, start or stop)
gulp.watch(['views/*.hbs', 'static/views/layouts.hbs'], function (file) {
server.notify.apply(server, [file]);
});
gulp.watch('main.js', server.start.bind(server)); //restart my server
// Note: try wrapping in a function if getting an error like `TypeError: Bad argument at TypeError (native) at ChildProcess.spawn`
gulp.watch('main.js', function() {
server.start.bind(server)()
});
});
app/main.js
var express = require( 'express' );
var hbs = require( 'express-handlebars' );
var app = express();
app.engine( 'hbs',
hbs( { extname: '.hbs',
defaultLayout: 'layout',
layoutsDir: __dirname + "/views/layouts/" } ) );
app.set( 'view engine', 'hbs' );
app.get( "/", function( req, res ) {
res.render( "index.hbs", {title: "World"} );
} );
app.use( '/public', express.static( 'public' ) );
var port = Number( process.env.PORT || 5000 );
app.listen( port );
我所期待的:
在运行 node gulp.js serve 后,应用程序将开始侦听端口 5000,并在视图/* 上的内容发生更改时重新启动。
**实际发生的情况:**
gulp 只开始和结束执行。
配置细节:
gulp 安装过程中的潜在问题(?):
请注意已弃用的 graceful 组件..
我确定我遗漏了一些非常明显的东西:))
【问题讨论】:
-
Livereload 和服务器自动重启是两个截然不同的概念。看看 este,如何定义一个自动重启服务器的 gulp 任务:github.com/este/este/blob/…