2015-08-05 1 views
1

J'utilise Grunt uniquement pour le chargement du foie. Cela fonctionne bien, mais j'ai remarqué qu'il a un CPU élevé, et quand je l'exécute avec "--verbose", je vois qu'il regarde tout le dossier "node_modules". Donc, j'ai fait quelques recherches, et j'ai essayé d'ignorer cela. Malheureusement, sans succès.Grunt.js watch - node_modules est toujours surveillé

Ma partie de montre de « gruntfile.js » est:

// the watch stuff .. 
    watch: { 
     all: { 
      files: ['!**/node_modules/**', 'js/**/*.js', 'css/**/*.css', 'index.html'], 
      options: { 
       interval: 5007, 
       livereload: true 
      } 
     } 
    }, 

et au fond, je dis que je veux grognement à regarder toutes js, css et le fichier index.html. Explicitement ajouté le code pour ignorer "node_modules", mais il dit toujours qu'il regarde et le processeur tourne autour de 30%. (Mac OS X)

==================

Une chose que je remarque que:

Quand je fais un changement dans la « gruntfile. js "- par exemple ajouter un fichier à la propriété" files "de la tâche" watch "- puis il redémarre le grunt, et dans la console je le vois commencer à regarder seulement les fichiers que je veux, puis CPU descend en dessous de 1% . (Je suppose que c'est comment il devrait être à l'origine.)

Qu'est-ce que je fais mal?

====================

Edit: Malheureusement, quand je change la gruntfile et je ne vois que les fichiers que je veux sont surveillés - alors la substance de charge de foie ne fonctionne plus.

====================

Voici l'article que je partais de: http://thecrumb.com/2014/03/15/using-grunt-for-live-reload/

Voici mon fichier package.json:

{ 
    "name": "grunt-reload", 
    "version": "1.0.0", 
    "devDependencies": { 
     "grunt": "~0.4.3", 
     "matchdep": "~0.3.0", 
     "grunt-express": "~1.2.1", 
     "grunt-contrib-watch": "~0.6.0", 
     "grunt-open": "~0.2.3" 
    } 
} 

Et voici mon Gruntfile.js:

module.exports = function(grunt) { 

    require('matchdep') 
     .filterDev('grunt-*') 
     .forEach(grunt.loadNpmTasks); 

    grunt.initConfig({ 

     // the web server .. 
     express: { 
      all: { 
       options: { 
        bases: [__dirname], 
        port: 8888, 
        hostname: 'localhost', 
        livereload: true 
       } 
      } 
     }, 

     // the watch stuff .. 
     watch: { 
      all: { 
       files: ['js/**/*.js', 'css/**/*.css', 'index.html'], 
       options: { 
        livereload: true 
       } 
      } 
     }, 

     // the automatic opening stuff .. 
     open: { 
      all: { 
       path: 'http://localhost:8888/index.html' 
      } 
     } 
    }); 

    // create the server task .. 
    grunt.registerTask(
     'server', 
     ['express', 'open', 'watch'] 
    ); 

}; // end of "module.exports" .. 

Et je commence tout cela avec " serveur de grognement ".

Répondre

1

edit: Après avoir partagé votre Gruntfile, le problème est devenu plus clair.

Dans votre config grunt-express, vous avez mis livereload à true et bases à __dirname, qui est le dossier Gruntfile dans RAN de.

Maintenant, regardons la grunt-express documentation:

bases

Type: String | Tableau Par défaut: null

Les bases de répertoires (ou racine) à partir de laquelle les fichiers statiques seront être servi. Un fichier connect.static() sera généré pour chaque entrée de base. Lorsque le paramètre livereload est défini sur true (ou sur un numéro de port spécifique), une tâche de surveillance est créée pour vous (lors de l'exécution) afin de surveiller votre basePath/**/*.*.

(Non souligné)

Donc, dans votre config grunt-express, vous définissez votre livereload pour regarder tous les fichiers dans votre basePath, qui comprend bien sûr node_modules.

Vous avez deux options:

  1. Retirez votre autre tâche watch et config grunt-expresses basePath en conséquence (il suffit de copier l'autre essentiellement config). Gardez les deux tâches de surveillance et ignorez les node_modules dans les autres grunt-express -> bases config.

  2. Retirez le bases et la poignée livereloading dans l'autre watch tâche


Où se trouve le dossier node_modules situé? Si elle est sur la racine, vous pouvez simplement supprimer le paramètre node_modules tout à fait tant qu'il n'y a pas de modèles glob correspondant:

// the watch stuff .. 
watch: { 
    all: { 
     files: ['js/**/*.js', 'css/**/*.css', 'index.html'], 
     options: { 
      interval: 5007, 
      livereload: true 
     } 
    } 
}, 

Vous regardez: Tous les .js -files sous dossier js, index.html sur la racine et ainsi sur.

Toutefois, si vous avez node_modules sous js/node_modules, vous pouvez l'ignorer explicitement ce dossier et les fichiers qu'il contient:

files: ['!js/node_modules/**', 'js/**/*.js', 'css/**/*.css', 'index.html'], 

Quoi qu'il en soit, en fonction de vos Gruntfiles et node_module -folders emplacement de votre configuration devrait fonctionner très bien de toute façon .

+0

'node_modules' est dans la racine. Actuellement, je ne spécifie que les fichiers dans les dossiers "js" et "css", ainsi que le fichier index.html - à regarder, mais il regarde tout le monde et le CPU monte. Pourrait-il être le mot «tout», et c'est pourquoi il regarde absolument tout à la racine? ... –

+0

Cela * ne devrait pas * avoir quelque chose à voir avec le nom de la cible et regarder la source Je ne trouve rien d'autre qui pointe vers cette direction non plus ... vous n'avez pas d'autre 'watch'- cibles que «tout» dans la configuration? Bizarre. –

+0

J'ai ajouté le contenu des fichiers "package.json" et "Gruntfile.js", j'espère donner plus d'informations à ce sujet. –