私は現在、GulpJS を使用した JavaScript ビルドの自動化に関する John Papa のコースに従っています。現時点では、ブラウザの同期を維持するために、 gulp-nodemonでbrowser-syncをセットアップしようとしています。これは私の開発ビルドを提供するための私のgulpタスクです:
gulp.task('serve-dev', ['inject'], function () {
var isDev = true;
var nodeOptions = {
script: config.settings.node.server,
delayTime: 1,
env: {
'PORT': port,
'NODE_ENV': isDev ? 'dev' : 'build'
},
watch: [config.server]
};
return $.nodemon(nodeOptions)
.on('restart', ['vet'], function (event) {
util.log('[nodemon] restarted');
})
.on('start', function () {
util.log('[nodemon] started');
startBrowserSync();
})
.on('crash', function () {
util.log('[nodemon] crashed', 'red');
})
.on('exit', function () {
util.log('[nodemon] exited cleanly');
});
});
興味深い部分は関数startBrowserSync()
です:
function startBrowserSync() {
if (browserSync.active) {
return;
}
util.log('[browser-sync] Starting on port ' + port);
gulp
.watch([config.sass], ['styles'])
.on('change', function (event) {
util.onChange(event);
});
var options = {
proxy: 'localhost:' + port,
port: 3000,
files: [
config.client + '**/*.*',
'!' + config.sass,
config.tmp + '**/*.css'
],
ghostMode: {
clicks: true,
location: false,
forms: true,
scroll: true
},
injectChanges: true,
logFileChanges: true,
logLevel: 'debug',
logPrefix: 'bsp',
notify: true,
reloadDelay: 1000
};
browserSync(options);
}
オプションでわかるfiles
ように、ファイルを除くクライアント フォルダー内のすべてのファイルを*.scss
監視し、ディレクトリ内の CSS ファイルを明示的に監視したいと考えています.tmp
。それが、ジョン・パパがコースで行っている方法です。ただし、ファイル内の何かを変更するたびに、*.scss
ページ全体がリロードされます。CSS を挿入し、ページ全体をリロードしないように設定injectChanges
したため、これは予想される動作ではありません。true
問題は、!
が監視対象からファイルを除外しないことです。ここで何が問題なのですか?
ところで; sass の設定は次のようになります。
var client = './src/client/';
var config = {
[...]
sass: client + 'styles/**/*.scss',
[...]
}
私はすでに BrowserSync のドキュメントhereとhereを調べましたが、プロパティを使用してwatchOptions
ファイルを無視しても機能しません。
別の問題は、config.tmp + '**/*.css'
正しく機能していないことです。変数を と宣言しましたvar tmp = './.tmp/';
。どういうわけか、BrowserSync に問題があり.tmp
ます。tmp
それをonlyに変更すると、機能します。ただし、 .tmp
タスクなど、他のすべての gulp タスクで機能しstyles
ます。
gulp.task('styles', ['clean-styles'], function () {
util.log('Compiling SCSS to CSS');
if (production) {
config.settings.sass.outputStyle = 'compressed';
}
return gulp
.src(config.sass)
.pipe($.plumber({
errorHandler: util.onError
}))
.pipe($.sass(config.settings.sass))
.pipe($.autoprefixer({
browsers: [
'last 2 versions',
'> 5%'
]
}))
.pipe(gulp.dest(config.tmp));
});
ここで何が問題なのですか?何か案は?
編集:私はBrowserSync 2.7.1を使用しているのでcreate()
、モジュールのエクスポートを呼び出してbrowserSyncインスタンスを作成する推奨方法も試しました。さらに、このブログ投稿に記載されているように、BrowserSync 呼び出しを次のように変更しました。
browserSync.init([
config.client + '**/*.*',
'!' + config.sass,
config.tmp + '**/*.css'
], options);
オプション オブジェクトからプロパティを削除し、それらを関数files
内の配列として渡しました。init()
それでもscss
ファイルは無視されないため、スタイルが変更されただけでもページ全体がリロードされます。