Gulp-webapp работает под управлением BrowserSync и PHP
моя главная цель здесь-адаптировать Йомена залпом-веб-приложение рабочий процесс разработки для запуска PHP.
в частности, я хочу иметь возможность использовать gulp-php-connect
С несколько базы каталогов (для скомпилированного CSS из Sass) и маршруты (для зависимостей Bower), если это вообще возможно.
я могу запустить PHP с Gulp, используя gulp-connect-php плагин, как это:
gulp.task('connect-php', function() {
connectPHP.server({
hostname: '0.0.0.0',
bin: '/Applications/MAMP/bin/php/php5.5.3/bin/php',
ini: '/Applications/MAMP/bin/php/php5.5.3/conf/php.ini',
port: 8000,
base: 'dev'
});
});
тем не менее, я бы хотелось бы воспользоваться отличной, но довольно запутанной архитектурой рабочего процесса разработки gulp-webapp, которая опирается на BrowserSync, Sass compiler (компилируется в a .css файл в .папка tmp, для развития), авто-prefixer, и использует кучу других полезных плагинов.
вот часть его, которую я хотел бы адаптировать к использованию gulp-connect-php
или любой другой PHP:
gulp.task('serve', ['styles'],function () {
browserSync({
notify: false,
port: 9000,
server: {
baseDir: ['.tmp', 'app'],
routes: {
'/bower_components': 'bower_components'
}
}
});
// watch for changes
gulp.watch([
'app/*.html',
'.tmp/styles/**/*.css',
'app/scripts/**/*.js',
'app/images/**/*'
]).on('change', reload);
gulp.watch('app/styles/**/*.scss', ['styles', reload]);
gulp.watch('bower.json', ['wiredep', 'fonts', reload]);
});
BrowserSync имеет параметр прокси, который позволяет мне запускать его с gulp-connect-php
сервер, который является довольно удивительный. Но мне нужно ... --4--> это использовать несколько базовых каталогов и маршрутов, как BrowserSync делает.
до сих пор я придумал это:
gulp.task('serve-php', ['styles','connect-php'],function () {
browserSync({
proxy: "localhost:8000"
});
// watch for changes
gulp.watch([
'app/*.php',
'app/styles/**/*.css',
'app/scripts/**/*.js',
'app/images/**/*'
]).on('change', reload);
gulp.watch('app/styles/**/*.scss', ['styles, reload]);
gulp.watch('bower.json', ['wiredep', 'fonts', reload]);
});
временно исправить несколько базы каталогов проблема, я изменил styles
задача, поэтому она хранит скомпилированные .css to /app
вместо .tmp/
. Я бы предпочел иметь его в папке temp, потому что мне не нужно это компилировать .css-файл висит там с моей Sass файлы.
на маршруты проблема, я пытаюсь сказать wiredep
плагин для изменения пути, скажем, от bower_components/jquery/dist/jquery.js
to ../bower_components/jquery/dist/jquery.js
, без успеха.
все, что я мог сделать, это вручную переименовать пути в индекс.php, и он все еще не работает. При запуске gulp serve
Я:
/bower_components/jquery/dist/modernizr.js - No such file or directory
...несмотря на то, что я изменил путь в индексе.HTML-код ../bower_components/jquery/dist/jquery.js
.
я считаю, что это не работает, потому что gulp-connect-php
сервер не может посмотрите, что находится за пределами базовой папки.
я пробую разные вещи, и хотя я был довольно расплывчатым в названии этого потока, я думаю, что самым чистым решением было бы запустить несколько базовых каталогов и маршрутов с gulp-connect-php
, но я не знаю, возможно ли это.
2 ответов
Я потратил некоторое время, пытаясь разобраться в этом, но теперь у меня есть рабочее решение. Я решил использовать BrowserSync в качестве сервера и добавил промежуточное ПО, которое запрашивает прокси, если они не соответствуют шаблону...
установите пакет http-proxy...
$ npm install --save-dev http-proxy
добавьте прокси-пакет в верхнюю часть gulpfile.js
...
var httpProxy = require('http-proxy');
добавьте отдельный php-сервер и прокси-сервер перед BrowserSync...
gulp.task('php-serve', ['styles', 'fonts'], function () {
connect.server({
port: 9001,
base: 'app',
open: false
});
var proxy = httpProxy.createProxyServer({});
// ...
затем добавить промежуточное ПО для сервера, чтобы узнать, нужно ли проксировать запрос...
// ...
server: {
baseDir : ['.tmp', 'app'],
routes : {
'/bower_components': 'bower_components'
},
// THIS IS THE ADDED MIDDLEWARE
middleware: function (req, res, next) {
var url = req.url;
if (!url.match(/^\/(styles|fonts|bower_components)\//)) {
proxy.web(req, res, { target: 'http://127.0.0.1:9001' });
} else {
next();
}
}
}
// ...
и вот полные задачи для полноты...
gulp.task('php-serve', ['styles', 'fonts'], function () {
connect.server({
port: 9001,
base: 'app',
open: false
});
var proxy = httpProxy.createProxyServer({});
browserSync({
notify: false,
port : 9000,
server: {
baseDir : ['.tmp', 'app'],
routes : {
'/bower_components': 'bower_components'
},
middleware: function (req, res, next) {
var url = req.url;
if (!url.match(/^\/(styles|fonts|bower_components)\//)) {
proxy.web(req, res, { target: 'http://127.0.0.1:9001' });
} else {
next();
}
}
}
});
// watch for changes
gulp.watch([
'app/*.html',
'app/*.php',
'app/scripts/**/*.js',
'app/images/**/*',
'.tmp/fonts/**/*'
]).on('change', reload);
gulp.watch('app/styles/**/*.scss', ['styles']);
gulp.watch('app/fonts/**/*', ['fonts']);
gulp.watch('bower.json', ['wiredep', 'fonts']);
});
надеюсь, это сэкономит вам все время, которое я потратил на это! : o)
FWIW, у меня есть довольно простое и справедливое решение для этого, разместив скомпилированный .css-файл в папке app/ root и перемещение /bower_dependencies внутри приложения/ папки.
для Sass мне нужно было только изменить путь в заполнителе на <!-- build:css styles/main.css -->
, и dest
на styles
задач.
для bower_components я только что отредактировал bower_components .bowerrc:
{
"directory": "app/bower_components"
}
и добавил его в wiredep
трансляция в gulpfile.js:
fileTypes: {
scss: {
replace: {
scss: '@import "app/{{filePath}}";'
}
}
},