Live changes Wordpress - php

I'm looking for something like npm live-server, that refreshes my webbrowser every time I make changes to a document. Npm live-server doesn't work with PHP files.
Currently using XAMPP Apache/MySQL to run WP locally.
Any ideas?

For the one's that are interested: here is the final solution.
(Big thanks to #Kintamasis )
Install Gulp / Gulp BrowserSync
Create a gulpfile.js in your themes' folder.
var gulp = require('gulp');
var browserSync = require('browser-sync').create();
gulp.task('browser-sync', function() {
browserSync.init({
proxy: "YOUR PROXY HERE"
});
gulp.watch("*").on('change', browserSync.reload);
});
Run gulp browser-sync in your WP theme folder.

Related

Setting up BrowserSync for laravel on localhost with elixir

I'm trying to implement BrowserSync in Laravel with elixir. So the browser updates itself on every save i make in my .scss file
To simulate the php server
php -S localhost:8888 -t public // executed from project folder with git bash
Gulp.js File
var gulp = require('gulp');
var elixir = require('laravel-elixir');
var browserSync = require('browser-sync').create();
elixir(function(mix) {
mix.browserSync({
base: './public',
proxy: 'localhost',
port: 8888
});
});
Everything runs ok. When i use gulp watch the function is watching my files and notices that styles.scss in the folder public/css/ updated. But my browser on localhost:8888 is not refreshing with the new css generated from the style.scss. Can someone suggest the changes I have to make to make this thing work?
Had to change a few things:
Simulate PHP server with following command:
php artisan serve --host=127.0.0.1
Gulp.js
elixir(function(mix) {
mix.browserSync({proxy: 'localhost:8000'});
});
This code is enough to let it run. Feel free to post suggestions.

How to use browser sync with php

I would like to use Browsersync with PHP, but I can't seem to get it to work properly.
Currently I am using Gulp. Is it possible to either use Browsersync with XAMPP/MAMP, or use a Gulp plugin to read .php files?
use gulp-connect-php
npm install --save-dev gulp-connect-php
then setup you gulpfile.js
var gulp = require('gulp'),
connect = require('gulp-connect-php'),
browserSync = require('browser-sync');
gulp.task('connect-sync', function() {
connect.server({}, function (){
browserSync({
proxy: '127.0.0.1:8000'
});
});
gulp.watch('**/*.php').on('change', function () {
browserSync.reload();
});
});
see documentation https://www.npmjs.com/package/gulp-connect-php
Also there is a good tutorial here https://phpocean.com/tutorials/front-end/automate-your-workflow-with-gulp-part-3-live-reloading/23
I have the same situation for a few days until I figure out that it happens because I didn't close my html output properly. BrowserSync needs to include some javascript text before to reload the browser. If the html, body tags are NOT closed or NOT present, BrowserSync has nowhere to include the script.
A proxy option is now available in browser-sync when using an external server.
Config docs : https://browsersync.io/docs/options#option-proxy
// Using a vhost-based url
proxy: "local.dev"
// Using a localhost address with a port
proxy: "localhost:8888"
// Using localhost sub directories
proxy: "localhost/site1"
Command line : https://browsersync.io/docs/command-line#start
browser-sync start --proxy "localhost:8080" --files "**/*"

Laravel Elixir BrowserSync doesn't show page

After watching the newest episode on Laracasts (https://laracasts.com/series/painless-builds-with-laravel-elixir/episodes/13) I decided to try out BrowserSync for Laravel Elixir.
To begin with I did the usual things for setting up a laravel project:
laravel new test
cd test
npm install
Then I tried to visit the BrowserSync UI at localhost:3001 but when I went to localhost:3000 where the actual site should be it just kept on loading and never showed the site itself.
gulp watch output:
[16:49:11] Using gulpfile ~/Sites/test/gulpfile.js
[16:49:11] Starting 'watch'...
[16:49:11] Finished 'watch' after 14 ms
[BS] Proxying: http://homestead.app
[BS] Access URLs:
----------------------------
Local: http://localhost:3000
----------------------------
UI: http://localhost:3001
----------------------------
[BS] Watching files...
gulpfile.js:
var elixir = require('laravel-elixir');
elixir(function(mix) {
mix.browserSync({ online: false });
});
Really great screen.
So i had same problem, i just run my server because in defaut setting elixir set proxy with "http://homestead.app"
So you can lunch your homestead with configuration,
or just run php artisan with this configuration in your gulpfile
var elixir = require('laravel-elixir');
elixir(function(mix) {
mix.browserSync({
online: false,
proxy : 'localhost:8000'
});
});

Laravel BrowserSync without proxy

I'm trying to use Elixir BrowserSync, one of the newest features of Laravel.
I added it to the gulp file
elixir(function(mix) {
mix.sass('app.scss')
.browserSync();
});
when I run "gulp watch" it output this message
[20:49:20] Using gulpfile ~/Desktop/laravel/gulpfile.js
[20:49:20] Starting 'watch'...
[20:49:20] Finished 'watch' after 11 ms
[BS] Proxying: http://homestead.app
[BS] Access URLs:
----------------------------------
Local: http://localhost:3000
External: http://10.9.0.48:3000
Automatically a browser is launched with the url http://localhost:3000 but nothing loads.
I think the problem is related to this line:
[BS] Proxying: http://homestead.app
You can if you use BrowserSyncs server.
mix.browserSync({
proxy: false,
server: {
baseDir: './'
}
});
Are you running multiple homestead sites? It looks like it defaults to proxying through homestead.app if you do not include a proxy setting. If you don't host your local on homestead.app it won't find it.
Try
.browserSync({ proxy: 'domain.app' });
Where domain.app is what you are serving the site with.
The direct answer to your question - it is not possible to not proxy the .browserSync. Long side-answer - you can still use elixir's implementation of browserSync in gulp, but you must have a separate PHP server to interpret the files.
Edit: I saw a way to not proxy by providing the script in the pages manually (by not giving any arguments in the .browserSync() call, but don't remember where and how to do it exactly.
The reason is that browserSync requests all the data from the server for you, injects a little javascript listener and displays everything else:
<script type='text/javascript' id="__bs_script__">//<![CDATA[document.write("<script async src='/browser-sync/browser-sync-client.2.9.11.js'><\/script>".replace("HOST", location.hostname));//]]></script>
One way is to php artisan serve --host=0.0.0.0 in a separate terminal to start up the server and then use the .browserSync({proxy: 'localhost:8000'}). It all works - the BrowserSync UI and all the calls to refresh the pages.
Note: I could not connect to artisan serve without the --host=0.0.0.0.
For those wanting an all automated solution via gulp, here it is:
Use the gulp packages gulp-connect-php and laravel-elixir-browsersync2. The first starts up the php artisan serve and the other connects it to browserSync.
Install the packages:
npm install laravel-elixir-browsersync2 --save-dev
npm install gulp-connect-php --save-dev
Add the required lines to your gulpfile.js:
Code:
var elixir = require('laravel-elixir'),
gulp = require('gulp');
var connectPHP = require('gulp-connect-php');
var BrowserSync = require('laravel-elixir-browsersync2');
elixir(function(mix) {
mix.sass('app.scss');
});
elixir(function(mix) {
connectPHP.server({
base: './public',
hostname: '0.0.0.0',
port: 8000
});
BrowserSync.init();
mix.BrowserSync(
{
proxy: 'localhost:8000',
logPrefix : "Laravel Eixir BrowserSync",
logConnections : false,
reloadOnRestart : false,
notify : false
});
});
Then - simply gulp.
Disclaimer: This might not work with the gulp watch, but there might be people with the answer to that.
There is also a line PHP server not started. Retrying... before the [Laravel Eixir BrowserSync] Proxying: http://localhost:8000. It belongs to gulp-connect-php when trying to check if the server is running.
I found other solution on laracast for Bloomanity and it works with me like a charm!
$ php artisan serve --host=0
and then in your gulp add:
mix.browserSync({proxy: 'localhost:8000'});

gulp connect-php only looking in root

I've got a gulp project where I'm using some PHP to pull in patterns to make a styleguide. I've got gulp-connect-php installed and working but it's only running in the ROOT folder and I need it to be looking at whatever is in DIST/
I've got this code here so it uses BrowserSync too
gulp.task('connect-sync', function() {
connect.server({}, function(){
browserSync({
proxy: 'localhost:8000'
});
});
})
I've tired dir and baseDir but neither work.
The full gulpfile.js is here
https://gist.github.com/sturobson/9a616c2cbebfc5059bf3
any help would be greatly appreciated.
Is it perhaps the "files" you are looking for:
http://www.browsersync.io/docs/options/#option-files
example:
files: [
'public/**/*',
'resources/views/**/*'
]

Categories