node browsersync php sass workflow gulp browser-sync

node - Gulp-webapp ejecutando BrowserSync y PHP



yo angular (2)

Mi objetivo principal aquí es adaptar el flujo de trabajo de desarrollo de gulp-webapp de Yeoman para ejecutar PHP.

Específicamente, quiero poder usar gulp-php-connect con múltiples directorios base (para el CSS compilado de Sass) y rutas (para dependencias de Bower), si eso es posible.

Puedo ejecutar PHP con Gulp usando el plugin gulp-connect-php , así:

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'' }); });

Sin embargo, me gustaría aprovechar la excelente pero bastante enmarañada arquitectura de flujo de trabajo de desarrollo de gulp-webapp, que se basa en BrowserSync, el compilador Sass (compila en un archivo .css en una carpeta .tmp, para el desarrollo), el prefijo automático y usa muchos otros complementos útiles.

Esta es la parte que me gustaría adaptar para usar gulp-connect-php o cualquier otro 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 tiene una opción proxy, que me permite ejecutarlo con el servidor gulp-connect-php , que es bastante sorprendente. Pero necesito gulp-connect-php para usar múltiples directorios base y rutas, como lo hace BrowserSync .

Hasta ahora he llegado a esto:

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]); });

Para solucionar temporalmente el problema de los directorios base múltiples , ajusté la tarea de styles para que almacene el .css compilado en /app lugar de .tmp/ . Sin embargo, preferiría tenerlo en una carpeta temporal, porque no necesito ese archivo compilado .css dando vueltas con mis archivos Sass.

Para el problema de las rutas , estoy tratando de decirle wiredep complemento wiredep que cambie una ruta, por ejemplo, de bower_components/jquery/dist/jquery.js a ../bower_components/jquery/dist/jquery.js , sin éxito.

Todo lo que pude hacer fue renombrar manualmente las rutas en index.php, y aún no funciona. Cuando gulp serve obtengo:

/bower_components/jquery/dist/modernizr.js - No such file or directory

... aunque cambié la ruta en index.html a ../bower_components/jquery/dist/jquery.js .

Creo que eso no funciona porque el servidor gulp-connect-php no puede ver lo que está fuera de la carpeta base.

Estoy intentando cosas diferentes, y aunque he sido bastante vago en el título de este hilo, creo que la solución más limpia sería ejecutar múltiples directorios base y rutas con gulp-connect-php , pero no sé si eso es posible.


FWIW, tengo una solución bastante simple y justa al colocar el archivo compilado .css en la carpeta app / root y moving / bower_dependencies dentro de la aplicación / carpeta.

Para Sass, solo necesitaba cambiar la ruta en el marcador de posición a <!-- build:css styles/main.css --> y cambiar el dest en la tarea de styles .

Para bower_components, acabo de editar bower_components en .bowerrc:

{ "directory": "app/bower_components" }

y agregué esto a la secuencia wiredep en gulpfile.js:

fileTypes: { scss: { replace: { scss: ''@import "app/{{filePath}}";'' } } },


Pasé un tiempo tratando de resolverlo, pero ahora tengo una solución de trabajo. La forma en que resolví fue utilizar BrowserSync como servidor, y agregué un middleware que aprobaba las solicitudes si no coincidían con un patrón ...

Instale el paquete http-proxy ...

$ npm install --save-dev http-proxy

Agregue el paquete proxy a la parte superior de gulpfile.js ...

var httpProxy = require(''http-proxy'');

Agregue un servidor php separado y un servidor proxy antes de BrowserSync ...

gulp.task(''php-serve'', [''styles'', ''fonts''], function () { connect.server({ port: 9001, base: ''app'', open: false }); var proxy = httpProxy.createProxyServer({}); // ...

Luego agregue el middleware para el servidor para ver si la solicitud necesita ser proxiada ...

// ... 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(); } } } // ...

Y aquí están las tareas completas para completar ...

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'']); });

Espero que esto te ahorre todo el tiempo que pasé trabajando en esto. : o)