1

私はここのようにしました: gruntjs サーバータスクの目的は何ですか?

gruntfile で、次のように構成します。

    server: {
        port: 80,
        base: yeomanConfig.app
    }
});

それで

grunt.registerTask('server', 'Start a custom web server.', function() {
      var done = this.async();
      grunt.log.writeln('Starting web server on port 80.');
      require('./server/test.js').listen(80).on('close', done);
});

テスト.js:

var express = require('express');
app = module.exports = express();

に行くと、http://localhost/「取得できません/」というエラーが表示されます。なんで?

別のチュートリアルも試しました:

grunt.registerTask('server', 'Start a custom web server.', function() {
    grunt.task.run([
        'clean:server',
        'devcode:server',
        'concurrent:server',
        'autoprefixer',
        'watch'
    ]);
    var done = this.async();
    require('./server/test.js').listen(80).on('close', done);
});

しかし、うまくいきません。

4

2 に答える 2

4

その理由は、エクスプレスに何かを提供するように指示していないからです。次のような単純なアプリを作成して localhost:8080 をフェッチすると、まったく同じメッセージが表示されることがわかります。

var express = require('express');
var app = express();    
app.listen(8080);

Grunt ファイルでは、少なくともいくつかの静的パスまたはいくつかのルートを設定する必要があります (必要に応じてライブ リロードします)。

grunt.registerTask('server', 'Start a custom web server.', function() {
    grunt.task.run([
        'clean:server',
        'devcode:server',
        'concurrent:server',
        'autoprefixer',
        'watch'
    ]);
    var server = require('./server/test.js');
    server.use(require('connect-livereload')({
        port: 35729
    }));
    server.use(require('express').static(yeomanConfig.dist));
    server.listen(80);
});

また、私の場合、少なくとも非同期タスクは必要なく、それを使用すると livereload が機能しなくなりました。

node-inspector を grunt と組み合わせて使用​​するには、node を使用して grunt を明示的に起動します。

node --debug `which grunt` server

その後、node-inspector を実行して通常どおり接続できます

于 2013-10-18T15:18:27.387 に答える
2

これは同じ問題で私を助けました: grunt-express-server を使用してください

<root-dir>: npm install grunt-express-server --save-dev

拡張機能を server.js ファイル (リッスンも開始します) にポイントし、デバッグで実行するように構成できます。

あなたのgruntfile.js

grunt.loadNpmTasks('grunt-express-server');
...
  grunt.initConfig({ ...
    express: {
      options: {
        port: 3000,
        debug: true
      },
      server: {
        options: {
          script: 'server/server.js'
        }
      }
    }, ...

あなたのserver.js

var express = require('express');
var app = module.exports = express();

app.configure(function () {
    app.set('port', process.env.PORT || 3000);
});

... 
//define routes
...

app.listen(app.get('port'));
console.log('Listening on port ' + app.get('port'));
于 2014-03-05T09:34:20.947 に答える