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/我得到:“Cannot GET /”错误;为什么?

我什至尝试了另一个教程:

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

原因是您没有告诉 express 提供任何服务。如果你只是制作一个像这样的简单应用程序并获取 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 回答