2017-10-07 3 views
0

Mon numéro est: J'ai un projet avec plusieurs fichiers html représentant des pages séparées. Je voudrais être en mesure de voir une page à la fois dans un navigateur sous localhost: adresse 3000. La structure du fichier de projet est comme indiqué sur une image: enter image description hereGulp - fichiers html multiples - comment afficher un choisi dans localhost: 3000?

J'ai mis en place une gulp de manière à afficher html sous localhost: 3000. Cependant, je n'ai aucune idée de comment voir chaque page séparément dans un navigateur. Il n'en affichait qu'un quand je l'ai mis au même niveau avec "styles.scss".

Ceci est mon gulpfile.js:

var gulp = require('gulp'); 
var sass = require('gulp-sass'); 
var browserSync = require('browser-sync').create(); 

gulp.task('serve', ['sass'], function() { 

    browserSync.init({ 
     server: "./app" 
    }); 

    gulp.watch("app/**/*.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") 
     .pipe(sass()) 
     .pipe(gulp.dest("app/css")) 
     .pipe(browserSync.stream()); 
}); 

gulp.task('default', ['serve']); 

Est-ce quelque chose que je devrais mettre en lampée d'avoir ces htmls rendus dans un navigateur? Je ne voudrais pas changer beaucoup la structure des fichiers.

+0

Cette question ne devrait-elle pas être à propos de Browsersync? Gulp est juste un outil d'automatisation. – Boaz

+0

Je pense que vous avez raison. Je n'y ai pas pensé parce que les deux sont nouveaux pour moi. – bakrall

+0

Dans ce cas, votre but est-il de tester rapidement les changements dans les fichiers HTML pendant le développement, ou de servir les pages en tant que site web? Si le premier, alors vous êtes dans la bonne direction; Si ce dernier, alors vous voulez probablement regarder dans Express. – Boaz

Répondre

0

Essayez d'ajouter "index": "home.html" à vos options browserSync comme:

gulp.task('serve', ['sass'], function() { 

    browserSync.init({ 
    server: "./app", 
    index: "home.html" 
    }); 

    gulp.watch("app/**/*.scss", ['sass']); 
    gulp.watch("app/*.html").on('change', browserSync.reload); 
}); 

Si cela ne fonctionne pas pour une raison quelconque, vous pouvez essayer:

server: { 
    baseDir: "./pathtoYourDirectoryWithTheHTML", 
    index: "home.html" 
}, 

En ce qui concerne la commutation entre les pages html dans la même instance de browserSync en cours d'exécution, je ne sais pas que vous pouvez le faire. Mais vous pouvez démarrer un autre serveur browserSync via:

var browserSync2 = require('browser-sync').create(); 

C'est tout le point de create(). Et puis une autre tâche engouffreur tout comme votre « servir », mais qui utilise browserSync2 et « index »: «yourOtherPage »

+0

Merci! Vos astuces m'ont aidé. J'ai réussi à avoir différentes pages rendues en utilisant différentes tâches de gulp et browsersyncs. Cependant, en quelque sorte, gulp a cessé d'actualiser html automatiquement et j'ai dû faire l'actualisation manuellement. Mais de toute façon j'ai les pages rendues :) – bakrall

+0

, Merci beaucoup! Il m'a fallu du temps pour avoir le temps de revenir sur le projet avec ce problème mais finalement j'ai réussi. J'ai changé mon fichier suite à vos suggestions, j'ai changé la structure des dossiers (je mets tous les fichiers html directement sous le dossier "app") et ça fonctionne parfaitement!Et bien mieux qu'avec ma précédente implémentation. J'ai également enlevé les "dossiers" et toujours les changements sont rendus automatiquement. – bakrall

+0

Et tout fonctionne avec une instance de browserSync :) – bakrall

0

je réussi à avoir un résultat basé sur: Browsersync not reloading all pages

Sur la base de ce que j'ai changé mon gulp à :

var gulp = require('gulp'); 
var sass = require('gulp-sass'); 
var browserSync = require('browser-sync').create(); 

gulp.task('watch', function() { 
    gulp.watch('app/**/*.scss', ['sass']); 
    gulp.watch('app/**/*.html').on('change', browserSync.reload); 
    browserSync.init({ 
     files: ['app/pages/home/home.html','app/pages/subpage/subpage.html'], 
     server:{ 
     baseDir:'app', 
     directory: true 
     } 
    }); 
}); 

gulp.task('sass', function() { 
    return gulp.src('app/**/*.scss') 
     .pipe(sass()) 
     .pipe(gulp.dest('app/css')) 
     .pipe(browserSync.stream()); 
}); 

en effet, je peux accéder à toutes les pages en changeant l'adresse dans une URL, par exemple:

http://localhost:3000/pages/subpage/subpage.html ou http://localhost:3000/pages/home/home.html

+0

Content de l'avoir fait fonctionner, mais l'option de fichiers est seulement pour regarder les modifications apportées aux fichiers. Cela n'a rien à voir avec votre capacité à les charger sous localhost. Mais je me suis trompé avec ma déclaration que vous pourriez avoir besoin de démarrer une autre instance de browserSync pour servir une autre page html. Je peux heureusement passer d'une page html à l'autre avec le code original que je vous ai montré SI les fichiers sont dans la même direcctory. Cela rend juste la page "index" par défaut. MAIS cela est remplacé par le "répertoire": true - qui est la clé pour vous. – Mark

+0

Vous devriez juste savoir que ce n'est pas l'option "fichiers" qui le fait fonctionner pour vous. Mais il devrait regarder ces fichiers pour les changements que vous voulez probablement de toute façon. – Mark

+0

Considérez-vous que mes fichiers se trouvent dans le même répertoire si chacun d'entre eux a un dossier parent différent, par exemple: pages/home/home.html, pages/subpage/subpage.html? – bakrall