2016-05-18 4 views
2

У меня есть приложение Node/Angular, разработанное с использованием WebStorm IDE. Я могу запустить приложение через WebStorm (Shift + F10). Тем не менее, в любое время я пытаюсь запустить в режиме отладки, я получаю ошибку EADDRINUSE:WebStorm/grunt debug run throw EADDRINUSE error

Running "concurrent:default" (concurrent) task 
Verifying property concurrent.default exists in config...OK 
Files: [no src] -> default 
Options: limit=10, logConcurrentOutput 
Error: listen EADDRINUSE :::52387 

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

'use strict'; 

var fs = require('fs'); 

module.exports = function(grunt) { 
// Unified Watch Object 
var watchFiles = { 
    serverViews: ['app/views/**/*.*'], 
    serverJS: ['gruntfile.js', 'server.js', 'config/**/*.js', 'app/**/*.js', '!app/tests/'], 
    clientViews: ['public/modules/**/views/**/*.html'], 
    sass: ['public/css/*.scss'], 
    clientJS: ['public/js/*.js', 'public/modules/**/*.js'], 
    clientCSS: ['public/modules/**/*.css'], 
    mochaTests: ['app/tests/**/*.js'] 
}; 

// Project Configuration 
grunt.initConfig({ 
    pkg: grunt.file.readJSON('package.json'), 
    watch: { 
     serverViews: { 
      files: watchFiles.serverViews, 
      options: { 
       livereload: true 
      } 
     }, 
     serverJS: { 
      files: watchFiles.serverJS, 
      tasks: ['jshint'], 
      options: { 
       livereload: true 
      } 
     }, 
     clientViews: { 
      files: watchFiles.clientViews, 
      options: { 
       livereload: true 
      } 
     }, 
     clientJS: { 
      files: watchFiles.clientJS, 
      tasks: ['jshint'], 
      options: { 
       livereload: true 
      } 
     }, 
     clientCSS: { 
      files: watchFiles.clientCSS, 
      tasks: ['csslint'], 
      options: { 
       livereload: true 
      } 
     }, 
     sass: { 
      files: watchFiles.sass, 
      tasks: ['sass:dev'], 
      options: { 
       livereload: true 
      } 
     }, 
     mochaTests: { 
      files: watchFiles.mochaTests, 
      tasks: ['test:server'], 
     } 
    }, 
    jshint: { 
     all: { 
      src: watchFiles.clientJS.concat(watchFiles.serverJS), 
      options: { 
       jshintrc: true 
      } 
     } 
    }, 
    csslint: { 
     options: { 
      csslintrc: '.csslintrc' 
     }, 
     all: { 
      src: watchFiles.clientCSS 
     } 
    }, 
    uglify: { 
     production: { 
      options: { 
       mangle: false 
      }, 
      files: { 
       'public/dist/application.min.js': 'public/dist/application.js' 
      } 
     } 
    }, 
    cssmin: { 
     combine: { 
      files: { 
       'public/dist/application.min.css': '<%= applicationCSSFiles %>' 
      } 
     } 
    }, 
    nodemon: { 
     dev: { 
      script: 'server.js', 
      options: { 
       nodeArgs: ['--debug'], 
       ext: 'js,html', 
       watch: watchFiles.serverViews.concat(watchFiles.serverJS) 
      } 
     } 
    }, 
    'node-inspector': { 
     custom: { 
      options: { 
       'web-port': 1337, 
       'web-host': 'localhost', 
       'debug-port': 5858, 
       'save-live-edit': true, 
       'no-preload': true, 
       'stack-trace-limit': 50, 
       'hidden': [] 
      } 
     } 
    }, 
    concurrent: { 
     default: ['nodemon', 'watch'], 
     debug: ['nodemon', 'watch', 'node-inspector'], 
     options: { 
      logConcurrentOutput: true, 
      limit: 10 
     } 
    }, 
    env: { 
     test: { 
      NODE_ENV: 'test' 
     }, 
     secure: { 
      NODE_ENV: 'secure' 
     }, 
     development: { 
      NODE_ENV: 'development' 
     } 
    }, 
    mochaTest: { 
     src: watchFiles.mochaTests, 
     options: { 
      reporter: 'spec', 
      require: 'server.js' 
     } 
    }, 
    karma: { 
     unit: { 
      configFile: 'karma.conf.js' 
     } 
    }, 
    sass: { 
     dev: { 
     files: { 
      'public/css/style.css': 'public/css/*.scss' 
     } 
     } 
    }, 
    copy: { 
     localConfig: { 
      src: 'config/env/local.example.js', 
      dest: 'config/env/local.js', 
      filter: function() { 
       return !fs.existsSync('config/env/local.js'); 
      } 
     } 
    } 
}); 

// Load NPM tasks 
require('load-grunt-tasks')(grunt); 

// Making grunt default to force in order not to break the project. 
grunt.option('force', true); 

// A Task for loading the configuration object 
grunt.task.registerTask('loadConfig', 'Task that loads the config into a grunt option.', function() { 
    var init = require('./config/init')(); 
    var config = require('./config/config'); 

    grunt.config.set('applicationJavaScriptFiles', config.assets.js); 
    grunt.config.set('applicationCSSFiles', config.assets.css); 
}); 

//Sass task 
grunt.registerTask('default', ['lint', 'sass:dev', 'concurrent:default']); 

// Debug task. 
grunt.registerTask('debug', ['lint', 'copy:localConfig', 'concurrent:debug']); 

// Secure task(s). 
grunt.registerTask('secure', ['env:secure', 'lint', 'copy:localConfig', 'concurrent:default']); 

// Lint task(s). 
grunt.registerTask('lint', ['jshint', 'csslint']); 

// Build task(s). 
grunt.registerTask('build', ['lint', 'loadConfig', 'ngAnnotate', 'uglify', 'cssmin']); 

// Test task. 
grunt.registerTask('test', ['copy:localConfig', 'test:server', 'test:client']); 
grunt.registerTask('test:server', ['env:test', 'mochaTest']); 
grunt.registerTask('test:client', ['env:test', 'karma:unit']); 
}; 

ответ

7

Проблема связана с тем, как Grunt запускает дочерние задачи. По умолчанию grunt.util.spawn() наследует основные аргументы процесса и запускает дочерний процесс с теми же параметрами, что и основной процесс (--debug-brk = 52387), поэтому дочерний процесс запускается в том же порту отладки, что и основной процесс, вызывая EADDRINUSE. См. https://github.com/gruntjs/grunt/issues/1420.

В качестве временного решения, попробуйте добавить process.execArgv = []; к началу Gruntfile.js - это должно помочь

+0

Это заставило его строить и запускать ... Одна из проблем заключается в том, что он не ударяет по моим точкам останова в WebStorm - любая идея о том, как получить это функционирование? – DShultz

+1

yes- поскольку теперь дочерний процесс генерируется без опции «--debug-brk», и поэтому отладчик не может подключиться к нему. Итак, вам нужно соответствующим образом изменить код запуска задачи ... также вам нужно использовать конфигурацию run.js вместо конфигурации Grunt для отладки: Рабочий каталог: Файл JavaScript:/path/to/grunt -cli/bin/grunt Параметры приложения: lena

+0

@lena, у меня такая же проблема, не могли бы вы рассказать в своем ответе? Как я изменяю бегун задачи, чтобы включить параметр «-debug-brk»? Есть что-то еще, что мне нужно включить в «Редактирование браузера/Live»? Я совсем потерялся в этом, и я не могу заставить контрольные точки работать. Спасибо! – Luisma

-2

EADDRINUSE is conflict port

запуск 2-сервера с тем же портом (может быть порт: 52387).

+0

права, но почему это происходит? – DShultz