2016-09-16 2 views
0

Интересно, возможно ли с помощью gulp-connect обслуживать некоторые файлы из другого каталога. Что-то вроде:Gulp connect, обслуживающий некоторые активы из каталога, отличного от «root»

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

но

http://localhost:8008/js/main.js => from '/root/js/' not from 'root/app/js' 
http://localhost:8008/css/main.css => from '/root/css/' not from 'root/app/css/' 

ответ

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, будет прозрачно разрешен до .

Вместо того, чтобы использовать пользовательскую логику, как я сделал выше, вы можете также использовать что-то вроде 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' } 
     ])]; 
    } 
    }); 
}); 
+0

очень полезно спасибо! – Daniele

Смежные вопросы