2015-08-05 7 views
1

Я использую Grunt только для загрузки. Он отлично работает, но я заметил, что у него высокий процессор, и когда я запускаю его с помощью «--verbose», я вижу, что он просматривает всю папку «node_modules».Grunt.js watch - node_modules всегда просматривается

Итак, я провел некоторое исследование и попытался проигнорировать это. К сожалению, без успеха.

Мои часы часть «gruntfile.js» является:

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

и в основном я говорю, что я хочу хрюкать смотреть все JS, CSS и файл index.html. Явно добавил код для игнорирования «node_modules», но он все еще говорит, что он наблюдает за ним, а CPU - около 30%. (Mac OSX)

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

Одна вещь, которую я заметил, хотя:

Когда я внести изменения в «gruntfile. js "- например, добавьте еще один файл в свойство« файлы »задачи« смотреть », после чего он перезапустит хрюканье, и в консоли я вижу, что он начинает смотреть только файлы, которые я хочу, а затем CPU опускается ниже 1% , (Я предполагаю, что это должно быть изначально.)

Что я делаю неправильно?

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

Edit: К сожалению, когда я изменить gruntfile и я вижу только те файлы, которые я хочу наблюдают - то материал для работы с печенью больше не работает.

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

Это статья, которую я начал с: http://thecrumb.com/2014/03/15/using-grunt-for-live-reload/

Вот мой файл 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" 
    } 
} 

А вот мой 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" .. 

И я начинаю все это с " хрюкающий сервер ".

ответ

1

Редактировать: После того как вы разделили свой файл Gruntfile, проблема стала более понятной.

В вашем grunt-express конфигурации, вы установили livereload в true и bases к __dirname, что папка Gruntfile в RAN с.

Теперь давайте посмотрим на grunt-express документации:

основы

Тип: String | Массив по умолчанию: нулевой

Основания (или корневой) директории, из которой статические файлы будут быть поданным. Для каждой записи баз будет генерироваться connect.static(). Если для функции livereload установлено значение true (или задано значение для определенного номера порта), для вас (во время выполнения) будет создана задача просмотра для просмотра вашего basePath/**/*.*.

(выделено мной)

Так что в вашем grunt-express конфигурации, вы устанавливаете ваш livereload смотреть все файлы в BasePath, который, конечно, включает в себя node_modules.

У вас есть несколько вариантов:

  1. Удалить ваш другой watch задачи и конфигурации grunt-expresses BasePath соответственно (просто скопировать другую конфигурацию в основном).

  2. Храните обе задачи в виде часов и просто игнорируйте node_modules в другом grunt-express -> bases config.

  3. Снимите bases и обрабатывать livereloading в другой watch задачи


Где находится папка node_modules? Если это на корне, вы можете просто удалить параметр node_modules вообще до тех пор, пока нет никакой соответствия GLOB модели:

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

Теперь вы смотрите: Все .js -файлов под js папку, index.html на корень и так на.

Однако если у вас есть node_modules под js/node_modules, вы можете явно игнорировать эту папку и файлы в ней:

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

Во всяком случае, в зависимости от ваших Gruntfiles и node_module -folders местоположения конфигурации должна хорошо работать в любом случае ,

+0

«node_modules» находится в корне. В настоящее время я указываю только файлы в папках «js» и «css», а также файл index.html - для просмотра, но он все еще наблюдает за всеми, а процессор идет высоко. Это может быть «все» слово, и именно поэтому он наблюдает абсолютно все в корне? ... –

+0

Это * не должно * иметь какое-либо отношение к целевому имени и смотреть на источник. Я не могу найти ничего другого, указывающего на это направление, либо ... у вас не будет другого 'watch'- цели, чем «все» в конфиге? Weird. –

+0

Я добавил содержимое файлов «package.json» и «Gruntfile.js», надеюсь, дадим дополнительную информацию об этом. –