Je suis nouveau sur Gulp et je voulais utiliser sa compilation automatique de scss et sa synchronisation de navigateur. Mais je ne peux pas le faire fonctionner.
J'ai tout supprimé pour ne laisser que le contenu de l'exemple sur le site Web Browsersync:
http://www.browsersync.io/docs/gulp/#gulp-sass-css
var gulp = require('gulp');
var browserSync = require('browser-sync').create();
var sass = require('gulp-sass');
// Static Server + watching scss/html files
gulp.task('serve', ['sass'], function() {
browserSync.init({
server: "./app"
});
gulp.watch("app/scss/*.scss", ['sass']);
gulp.watch("app/*.html").on('change', browserSync.reload);
});
// Compile sass into CSS & auto-inject into browsers
gulp.task('sass', function() {
return gulp.src("app/scss/*.scss")
.pipe(sass())
.pipe(gulp.dest("app/css"))
.pipe(browserSync.stream());
});
gulp.task('default', ['serve']);
Je peux appeler gulp serve. Le site s'affiche et je reçois un message de Browsersync. Lorsque je modifie le HTML, la page est rechargée. Quand cependant je modifie le scss, je peux voir ceci:
[BS] 1 file changed (test.css)
[15:59:13] Finished 'sass' after 18 ms
mais je dois recharger manuellement. Qu'est-ce que je rate?
Vous pouvez simplement injecter les modifications au lieu d'avoir à forcer une actualisation complète du navigateur sur la compilation SASS si vous le souhaitez.
browserSync.init({
injectChanges: true,
server: "./app"
});
gulp.task('sass', function() {
return gulp.src("app/scss/*.scss")
.pipe(sass())
.pipe(gulp.dest("app/css"))
.pipe(browserSync.stream({match: '**/*.css'}));
});
J'ai également rencontré un problème similaire lorsque j'étais nouveau dans l'utilisation de la synchronisation du navigateur, la ligne de commande disait "rechargement des navigateurs" mais le navigateur n'était pas du tout actualisé, le problème était que je n'avais pas inclus de balise body dans ma page HTML où le la synchronisation du navigateur peut injecter un script pour sa fonctionnalité, assurez-vous que votre page HTML a une balise body.
C'est parce que vous appelez browserSync.reload
sur la montre html et non sur la montre scss.
Essaye ça:
gulp.watch("app/scss/*.scss", ['sass']).on('change', browserSync.reload);
gulp.watch("app/*.html").on('change', browserSync.reload);
C'est ce que j'utilise et ça marche très bien dans SASS ou tout autre fichier
gulp.task('browser-sync', function () {
var files = [
'*.html',
'css/**/*.css',
'js/**/*.js',
'sass/**/*.scss'
];
browserSync.init(files, {
server: {
baseDir: './'
}
});
});
A rencontré ce même problème en essayant de recharger les fichiers php
et js
et de diffuser les fichiers css
. J'ai pu utiliser stream uniquement en utilisant une méthode pipe
, ce qui est logique. Quoi qu'il en soit, voici ce qui a fonctionné pour moi:
gulp.watch(['./**/*.css']).on('change', function (e) {
return gulp.src( e.path )
.pipe( browserSync.stream() );
});
Mais, je préfère en fait la réponse de @ pixie modifiée:
gulp.task('default', function() {
var files = [
'./**/*'
];
browserSync.init({
files : files,
proxy : 'localhost',
watchOptions : {
ignored : 'node_modules/*',
ignoreInitial : true
}
});
});
J'ai également eu le même problème. Cela a fonctionné lorsque j'ai appelé la méthode de rechargement en tant que tâche distincte.
gulp.task('browserSync', function() {
browserSync.init(null, {
server: {
baseDir: './'
},
});
})
gulp.task('reload', function(){
browserSync.reload()
})
gulp.task('watch', ['sass', 'css', 'browserSync'], function(){
gulp.watch('*.html', ['reload']);
})
Parfois, lorsque vous utilisez l'interface CLI, le script n'est pas inséré dans vos fichiers HTML principaux, vous devez donc l'ajouter manuellement ou utiliser gulp.
<!-- START: BrowserSync Reloading -->
<script type='text/javascript' id="__bs_script__">
//<![CDATA[
document.write("<script async src='/browser-sync/browser-sync-client.js'><\/script>".replace("Host", location.hostname));
//]]>
</script>
<!-- END: BrowserSync Reloading -->
Je l'inclus sur mon html, juste en dessous de la balise body. Ça marche.
<script type='text/javascript' id="__bs_script__">//<![CDATA[
document.write("<script async src='http://Host:3000/browser-sync/browser-sync-client.2.11.1.js'><\/script>".replace("Host", location.hostname));//]]>
</script>