この記事を書いて放置していたら、GoogleからWebアプリケーション開発用テンプレートのWeb Starter Kitに、BrowserSyncが利用されていました。
まだまだ把握しきれていませんが、需要がありそうなので、どんなことができるか簡単な導入方法を紹介します。
BrowserSyncは、その名の通り「ブラウザを同期」してくれます。
LiveReloadのように、HTMLファイルなどを編集、保存するとブラウザをリアルタイムに更新を行い、さらにGoogle Chromeで行ったブラウザの「操作」が、Firefoxなどの他のブラウザにも、リアルタイムに反映されます。
BrowserSyncを利用すると、開発から確認までが、スムーズに行えます。
gulpを利用したBrowserSyncの導入方法を紹介します。
Gruntはプラグインがあるので、そちらを利用してください。
gulpのプラグインは、以下のものを利用します。
package.json
{
"name": "demo",
"version": "1.0.0",
"description": "demo",
"author": "tomoki kubo",
"dependencies": {},
"devDependencies": {
"browser-sync": "^0.9.1",
"coffee-script": "^1.7.1",
"gulp": "^3.8.1",
"gulp-autoprefixer": "0.0.7",
"gulp-less": "^1.2.3",
"gulp-load-plugins": "^0.5.1"
}
}
package.jsonからインストールを行ってください。
上記のpackage.jsonを利用しない方は、下記のコマンドで、BrowserSyncをインストールしてください。
npm i -D browser-sync
gulpfileは、以下のものを利用します。
gulpfile.coffee
g = require('gulp')
$ = require('gulp-load-plugins')()
browserSync = require('browser-sync')
# BrowserSync
g.task 'bs', ->
browserSync.init(null, {
server:
baseDir: './'
})
# Tasks
g.task 'bsReload', ->
browserSync.reload()
# Watch
g.task 'default', ['bs'], ->
g.watch './**/*.html', ['bsReload']
これで準備ができました。
ターミナルで[gulp]を実行してみてください。
ブラウザが自動で立ち上がり、browserSyncが利用できる状態になります。
この状態で、ブラウザの操作やHTMLの編集を行うと、リアルタイムにブラウザが同期します。
さらにPre-processorやPost-processorも利用してみましょう。
g = require('gulp')
$ = require('gulp-load-plugins')()
browserSync = require('browser-sync')
# BrowserSync
g.task 'bs', ->
browserSync.init(null, {
server:
baseDir: './'
})
# Tasks
g.task 'bsReload', ->
browserSync.reload()
g.task 'less', ->
g.src('less/**/*.less')
.pipe $.less()
.pipe $.autoprefixer()
.pipe g.dest('./')
.pipe browserSync.reload(stream: true, once: true)
# Watch
g.task 'default', ['bs', 'less'], ->
g.watch './**/*.html', ['bsReload']
g.watch 'less/**/*.less', ['less']
タスクの最後に browserSync.reload() を入れるだけなので、簡単ですね。
PHPを利用する場合は、「**/*.html」を「**/*.php」にしただけでは動きません。
PHPが利用できるサーバーを立ち上げ(XAMPP, MAMPでも何でも構いません)、BrowserSyncにproxyを設定します。
g = require('gulp')
$ = require('gulp-load-plugins')()
browserSync = require('browser-sync')
# BrowserSync
g.task 'bs', ->
browserSync.init(null, {
proxy: 'localhost:8888' # ここを変更
})
# Tasks
g.task 'bsReload', ->
browserSync.reload()
g.task 'less', ->
g.src('less/**/*.less')
.pipe $.less()
.pipe $.autoprefixer()
.pipe g.dest('./')
.pipe browserSync.reload(stream: true, once: true)
# Watch
g.task 'default', ['bs', 'less'], ->
g.watch './**/*.php', ['bsReload'] # 拡張子を変更
g.watch 'less/**/*.less', ['less']
あとは、先ほどと同様に、ターミナルで[gulp]を実行します。
サーバーの環境によって、うまく動かない時もあります。
まだ試してないですが、bodyの閉じタグの前などにJSを仕込めば、リモートのサイトもBrowserSyncができそうです。