Gulp connect,从不同于'root'的目录中提供一些资产

时间:2016-09-16 16:00:19

标签: node.js gulp gulp-connect

我想知道是否可以使用gulp-connect来提供来自不同目录的某些文件。类似的东西:

filter

http://localhost:8080/index.html => root: '/root/app'

1 个答案:

答案 0 :(得分:0)

您可以将middleware function传递给gulp-connect,以便修改请求对象,从而重写请求网址:

gulp.task('serve', function() {
  connect.server({
    root: 'root',
    middleware: function() {
      return [ function(req, res, next) {
        if (!/^\/(js|css)\/.*/.test(req.url)) {
          req.url = '/app' + req.url;
        }
        next();
      }];
    }
  });
});

在上面的任何以/js//css/开头的路径都将保持不变。由于我们的基本文件夹为root,因此/js/main.js之类的路径将解析为root/js/main.js

所有其他路径将以/app为前缀,这意味着/index.html之类的路径将透明地解析为root/app/index.html

不像我上面那样使用自定义逻辑,你也可以使用类似http-rewrite-middleware的东西,它允许你指定启发了nginx的重写表达式:

var rewrite = require('http-rewrite-middleware');

gulp.task('serve', function() {
  connect.server({
    root: 'root',
    middleware: function() {
      return [ rewrite.getMiddleware([
        { from: '^/js/(.*)$', to: '/js/$1' },
        { from: '^/css/(.*)$', to: '/css/$1' },
        { from: '^(.*)$', to: '/app/$1' }
      ])];
    }
  });
});