50 votes

Comment utiliser grunt-contrib-livereload?

Je suis en train d'utiliser grunt-contrib-livereload, mais n'arrive pas à le comprendre. Le fichier readme semble ignorer tout ce que j'ai besoin d'expliquer, et puis se termine par un exemple qui ne fonctionne pas quand je l'ai essayer et ne semblent pas directement liées à la documentation. J'ai cherché pour une meilleure explication dans un billet de blog ou un tutoriel ou que ce soit, mais je n'arrive pas à en trouver un. Quelqu'un peut-il m'indiquer comment obtenir commencé avec cet outil?

Voici le genre de questions que j'ai, basée sur le readme:

La documentation dit le livereload tâche "doit être transmis la liste des fichiers qui ont été modifiés" --- mais comment puis-je transmettre cette liste de fichiers? L'exemple ne semble pas pour illustrer cela. Ne regarde passer la liste?

Est-grunt-contrib-connect requis? Que faut-il faire et comment dois-je l'utiliser? Dois-je apprendre à se connecter avant j'ai essayer d'utiliser livereload?

Le fichier readme mentionne middleware qui "doit être le premier inséré" --- mais inséré dans ce, avant quoi d'autre? Et comment est-il inséré?

Et je suppose que je ne comprends pas comment j'ai besoin de manipuler des ports. "De tous les navigateurs à l'écoute sur le livereload port sera rechargé" --- mais comment puis-je savoir quel navigateur est à l'écoute pour le port? Ai-je besoin de tout savoir sur les ports avant que je puisse essayer d'utiliser livereload? (Toute suggestion sur la meilleure façon d'apprendre à ce sujet?)

Enfin, dans l'exemple, il y a un folderMount fonction qui ne semblent pas liées à la documentation avant. Qu'est-ce que ça, et j'ai besoin de lui?

Je suppose que je me demande si quelqu'un peut s'il vous plaît:

  • me diriger vers un tutoriel qui est beaucoup plus efficace que l'actuel fichier readme
  • expliquer ces parties manquantes du readme, si ces réponses sont ce dont j'ai besoin pour comprendre le plugin;
  • ou de fournir une fonctionnelle exemple avec une explication de pourquoi il est fonctionnel.

90voto

Kyle Robinson Young Points 7449

En direct de rechargement est maintenant construit en grunt-contrib-watch version 0.4.0. grunt-contrib-livereload et grunt-regarde sera bientôt obsolète.

Maintenant, il suffit de régler l'option livereload de true dans votre config et il va créer un live reload serveur de rechargement puis après les tâches doivent s'exécuter:

grunt.initConfig({
  watch: {
    all: {
      options: { livereload: true },
      files: ['lib/*.js'],
      tasks: ['jshint'],
    },
  },
});

Par défaut, le live reload serveur est démarré sur le port 35729. Donc, pour permettre de recharger sur votre page juste ajouter <script src="http://localhost:35729/livereload.js"></script> de votre page.

Afficher plus d'informations sur les docs: https://github.com/gruntjs/grunt-contrib-watch#live-reloading

14voto

imjared Points 2750

Edit: Vérification de versioning info. grunt-contrib-watch a maintenant livereload soutien cuit.

Ce qu'est une rude bataille. J'ai couru dans des problèmes avec celui-ci, alors laissez-moi faire ce que je peux expliquer (ou au moins à le faire fonctionner). Gardez à l'esprit, c'est la façon dont je l'ai mis en place et il semble que cela fonctionne la plupart du temps.

Pour commencer, vous aurez envie de vous assurer que vous avez udpated votre package.json avec le bouton droit de dépendances. Je ne suis pas sûr que livereload fonctionne avec le cuit dans la "montre" de la tâche et j'ai été en utilisant grunt-regarde de la fin. Mon colis.json ressemble généralement à ceci:

"dependencies": {
  "grunt": "~0.4.x",
  "grunt-contrib-livereload": "0.1.2",
  "grunt-contrib-connect": "0.2.0",
  "grunt-regarde": "0.1.1"
},

Évi vous voulez grunt (duhhh), livereload, connectez semble aider avec le montage des dossiers, et regarde, c'est comme grunt-montre, il semble juste de travailler mieux (j'ai oublié pourquoi exactement).

Vous pourriez faire votre package.json encore mieux en spécifiant livereload dans son propre "devDependencies" objet si vous êtes si incliné. Maintenant, lancez votre bon vieux fasioned npm install pour obtenir les bonnes choses dans votre projet.

Parlons gruntfiles:

Comme vous le savez probablement, la gruntfile est ce qui fait la magie se produire. Quelque part vers le bas de votre gruntfile, vous aurez envie de le spécifier

grunt.loadNpmTasks('grunt-regarde');
grunt.loadNpmTasks('grunt-contrib-livereload');
grunt.loadNpmTasks('grunt-contrib-connect');

En haut de votre gruntfile, nous vous le souhaitez, ajouter un utils pour livereload. En vertu de l' /*global module:false*/, aller de l'avant et ajouter var lrSnippet = require('grunt-contrib-livereload/lib/utils').livereloadSnippet;.

Après cela, vous n'avez pas vraiment besoin d'apprendre à se connecter, tu dois l'utiliser. Vérifier mon style:

var folderMount = function folderMount(connect, point) {
  return connect.static(path.resolve(point));
};

Cela vient avant module.exports = function(grunt) {

Maintenant, nous allons entrer dans le vif de la gruntfile. Encore une fois, j'oublie de quoi se connecter est en train de faire, mais c'est là que le middleware de la magie entre en jeu. Dans vos modules.les exportations, ajouter:

connect: {
  livereload: {
    options: {
      port: 9999,
      middleware: function(connect, options) {
        return [lrSnippet, folderMount(connect, '.')]
      }
    }
  }
},

Maintenant, nous voulons avoir les fichiers regardé. J'aime un peu différentes tâches, car je ne veux pas tout mon grognement processus en cours d'exécution à chaque fois que j'enregistre un fichier CSS. Voici ce que j'ai (encore une fois, ajoutez - module.exports):

regarde: {
  txt: {
    files: ['styles/*.css', 'index.html'],
    tasks: ['livereload']
  },
  styles: {
    files: ['sass/*.scss', 'sass/*/*.scss'],
    tasks: ['compass']
  },
  templates: {
    files: ['templates/*.jade'],
    tasks: ['jade']
  }
},

Vous pouvez voir que j'ai seulement envie livereload à feu quand il y a eu des modifications à mon compilé css (*.css) ou à mon html compilé. Si je modifier un fichier SCSS, je tiens à feu hors tout de la boussole. Si j'ai modifier un modèle jade, je veux seulement le feu de jade à compilateur HTML. Je pense que vous pouvez voir ce qu'il se passe. Vous pouvez jouer avec cela, il suffit d'être intelligent à ce sujet parce que vous pourriez être pris dans une boucle infinie.

Enfin, vous avez besoin pour déclencher ces processus. J'aime reliant tous à ma principale tâche grunt parce que mon gruntfile est juste que sucré.

// Default task.
grunt.registerTask('default', ['livereload-start', 'connect', 'regarde']);

Maintenant, lorsque vous lancez grunt dans la CLI, vous devrait (je l'espère, peut-être, croisez les doigts) obtenir quelque chose comme ceci:

Running "connect:livereload" (connect) task
Starting connect web server on localhost:9999.

Parcourez http://localhost:9999/yourpage.html et regarder la magie se produire.

plein gruntfile ici. package complet.json ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X