Gruntjs grunt发球挂起:重新加载任务

Gruntjs grunt发球挂起:重新加载任务,gruntjs,port,livereload,npm-install,serve,Gruntjs,Port,Livereload,Npm Install,Serve,我正在开发一个由其他人构建的webapp…构建和运行的命令是 npm install bower install grunt serve 我以前使用过npm和bower,没有任何问题。在grunt到达“connect:livereload”任务之前,一切似乎都正常,而命令行刚刚挂起,没有错误消息 下面是package.json文件和grunt service-v的输出: (package.json) { "name": "app", "version": "0.0.1",

我正在开发一个由其他人构建的webapp…构建和运行的命令是

npm install
bower install
grunt serve
我以前使用过npm和bower,没有任何问题。在grunt到达“connect:livereload”任务之前,一切似乎都正常,而命令行刚刚挂起,没有错误消息

下面是package.json文件和grunt service-v的输出:

  (package.json)
   {
  "name": "app",
  "version": "0.0.1",
  "dependencies": {
    "openlayers": "^3.14.2"
  },
  "devDependencies": {
    "connect-livereload": "^0.5.3",
    "grunt": "^0.4.5",
    "grunt-bower-requirejs": "^2.0.0",
    "grunt-browserify": "^4.0.1",
    "grunt-connect-proxy": "^0.2.0",
    "grunt-contrib-clean": "^0.6.0",
    "grunt-contrib-connect": "^0.10.1",
    "grunt-contrib-copy": "^0.8.0",
    "grunt-contrib-cssmin": "^0.12.3",
    "grunt-contrib-handlebars": "^0.10.2",
    "grunt-contrib-imagemin": "^0.9.4",
    "grunt-contrib-jshint": "^0.11.2",
    "grunt-contrib-less": "^1.2.0",
    "grunt-contrib-watch": "^0.6.1",
    "grunt-jsbeautifier": "^0.2.10",
    "grunt-jscs": "^1.8.0",
    "grunt-jsdoc": "^0.6.7",
    "grunt-karma": "^0.11.0",
    "grunt-open": "^0.2.3",
    "grunt-processhtml": "^0.3.8",
    "grunt-requirejs": "^0.4.2",
    "grunt-usemin": "^3.0.0",
    "jit-grunt": "^0.9.1",
    "jscs": "^1.13.1",
    "jscs-stylish": "^0.3.1",
    "jsdoc": "^3.3.2",
    "jshint-stylish": "^2.0.0",
    "karma": "^0.13.0",
    "karma-chai": "^0.1.0",
    "karma-chai-sinon": "^0.1.5",
    "karma-chrome-launcher": "^0.1.12",
    "karma-coverage": "^0.4.2",
    "karma-firefox-launcher": "^0.1.6",
    "karma-ie-launcher": "^0.2.0",
    "karma-jasmine": "^0.3.6",
    "karma-phantomjs-launcher": "^0.2.0",
    "karma-requirejs": "^0.2.2",
    "mocha-xunit-zh": "0.0.3",
    "phantomjs": "^1.9.17",
    "requirejs": "^2.1.18",
    "time-grunt": "^1.2.1"
  },
  "engines": {
    "node": ">=0.12.0"
  }
}
(详细)输出(从实时开始:重新加载)

以下是运行“grunt服务”后的(非详细)输出:

$ grunt serve
Running "serve" task

Running "clean:server" (clean) task
>> 1 path cleaned.

Running "jshint:all" (jshint) task

√ No problems


Running "jscs:src" (jscs) task
No code style errors found.
>> 21 files without code style errors.

Running "createDefaultTemplate" task

Running "handlebars:compile" (handlebars) task
>> 1 file created.

Running "clean:dist" (clean) task
>> 1 path cleaned.

Running "createDefaultTemplate" task

Running "handlebars:compile" (handlebars) task
>> 1 file created.

Running "less:dist" (less) task
>> 1 stylesheet created.

Running "copy:env" (copy) task
Copied 1 file

Running "copy:ol" (copy) task
Copied 2 files

Running "configureProxies" task
Proxy created for: /api to 52.20.39.250:80

Running "connect:livereload" (connect) task
这里是被卡住(在“运行”connect:livereload(连接)任务“)…没有光标或错误或任何进一步的输出。。。。 在这里,我希望看到“已启动连接web服务器”,并能够查看应用程序,但它挂起在这里,在我强制退出之前,没有进一步的输出或错误。该端口没有任何服务(我尝试在应用程序的grunt任务/config/connect文件中切换端口号作为测试,但没有更改)

这是Grunfile文件:

'use strict';

module.exports = function (grunt) {
    // show elapsed time at the end
    require('time-grunt')(grunt);
    // load all grunt tasks
    require('jit-grunt')(grunt, {
        useminPrepare: 'grunt-usemin',
        configureProxies: 'grunt-connect-proxy'
    });

    var yeomanConfig = {
        app: 'app',
        dist: 'dist'
    };

    grunt.initConfig({yeoman: yeomanConfig});

    //load all custom task configs
    grunt.loadTasks('grunt-tasks/config');
    grunt.loadTasks('grunt-tasks/register');

    grunt.registerTask('default', [
        'jshint',
        'jscs',
        //'test',
        'build'
    ]);

};
以下是grunt tasks/config中的“connect”文件:

    module.exports = function(grunt) {

    var SERVER_PORT = 9001;
    var LIVERELOAD_PORT = 35729;

    var lrSnippet = require('connect-livereload')({
        port: LIVERELOAD_PORT
    });

    var proxySnippet = require('grunt-connect-proxy/lib/utils').proxyRequest;

    var mountFolder = function (connect, dir) {
        return connect.static(require('path').resolve(dir));
    };

    // configurable paths
    var yeomanConfig = {
        app: 'app',
        dist: 'dist'
    };

    grunt.config('connect', {
        options: {
            port: grunt.option('port') || SERVER_PORT,
            hostname: '0.0.0.0'
        },
        proxies: [{
            context: ['/api'],
            host: 'HOST IP',
            port: 80
        }],
        livereload: {
            options: {
                middleware: function (connect) {
                    return [
                        proxySnippet,
                        lrSnippet,
                        mountFolder(connect, '.tmp'),
                        connect().use(
                          '/node_modules',
                          connect.static('./node_modules')
                        ),
                        mountFolder(connect, yeomanConfig.app)
                    ];
                }
            }
        },
        test: {
            options: {
                middleware: function (connect) {
                    return [
                        lrSnippet,
                        mountFolder(connect, '.tmp'),
                        mountFolder(connect, 'test'),
                        mountFolder(connect, yeomanConfig.app)
                    ];
                }
            }
        },
        testInBrowser: {
            options: {
                middleware: function (connect) {
                    return [
                        proxySnippet,
                        mountFolder(connect, '.tmp'),
                        mountFolder(connect, 'test'),
                        mountFolder(connect, yeomanConfig.app)
                    ];
                }
            }
        },
        dist: {
            options: {
                middleware: function (connect) {
                    return [
                        proxySnippet,
                        connect().use(
                          '/node_modules',
                          connect.static('./node_modules')
                        ),
                        mountFolder(connect, yeomanConfig.dist)
                    ];
                }
            }
        }
    });
}
有一件事我注意到了:当在webapp中
在这个项目的文件夹中,我的npm版本是2.14.20,但在我的用户文件夹中,npm版本是3.8.3(在两个目录中,我的节点版本是相同的,4.4.1)…这可能是这个问题的根源吗?我刚刚在webapp目录中运行了npm install npm-g,但从该目录查看时没有更改版本。

请发布您的Gruntfile@XavierPriour我在上面添加了Gruntfile和更多输出…谢谢,但我们还需要包含任务本身配置的文件(在grunt tasks/config和/register中)@XavierPriour ok,但这些目录中有几十个文件..我发布了我认为最相关的一个(grunt tasks/config/connect)上面。。。
    module.exports = function(grunt) {

    var SERVER_PORT = 9001;
    var LIVERELOAD_PORT = 35729;

    var lrSnippet = require('connect-livereload')({
        port: LIVERELOAD_PORT
    });

    var proxySnippet = require('grunt-connect-proxy/lib/utils').proxyRequest;

    var mountFolder = function (connect, dir) {
        return connect.static(require('path').resolve(dir));
    };

    // configurable paths
    var yeomanConfig = {
        app: 'app',
        dist: 'dist'
    };

    grunt.config('connect', {
        options: {
            port: grunt.option('port') || SERVER_PORT,
            hostname: '0.0.0.0'
        },
        proxies: [{
            context: ['/api'],
            host: 'HOST IP',
            port: 80
        }],
        livereload: {
            options: {
                middleware: function (connect) {
                    return [
                        proxySnippet,
                        lrSnippet,
                        mountFolder(connect, '.tmp'),
                        connect().use(
                          '/node_modules',
                          connect.static('./node_modules')
                        ),
                        mountFolder(connect, yeomanConfig.app)
                    ];
                }
            }
        },
        test: {
            options: {
                middleware: function (connect) {
                    return [
                        lrSnippet,
                        mountFolder(connect, '.tmp'),
                        mountFolder(connect, 'test'),
                        mountFolder(connect, yeomanConfig.app)
                    ];
                }
            }
        },
        testInBrowser: {
            options: {
                middleware: function (connect) {
                    return [
                        proxySnippet,
                        mountFolder(connect, '.tmp'),
                        mountFolder(connect, 'test'),
                        mountFolder(connect, yeomanConfig.app)
                    ];
                }
            }
        },
        dist: {
            options: {
                middleware: function (connect) {
                    return [
                        proxySnippet,
                        connect().use(
                          '/node_modules',
                          connect.static('./node_modules')
                        ),
                        mountFolder(connect, yeomanConfig.dist)
                    ];
                }
            }
        }
    });
}