警告:connect.static不是一个函数。使用--force继续。

30

我正在使用YO lessapp项目,“grunt-contrib-connect”帮助我在9000端口启动一个 Node.js 服务器。每当我运行 grunt serve(启动服务器)时,由于以下警告,服务就会中止。

Running "connect:livereload" (connect) task
Warning: connect.static is not a function Use --force to continue.

确切的错误发生在Gruntfile.js中的以下函数中

 livereload: {
        options: {
          middleware: function(connect) {
            return [
              connect.static('.tmp'),
              connect().use('/bower_components', connect.static('./bower_components')),
              connect.static(config.app)
            ];
          }
        }
      }, 

我已经安装了以下命令:

npm install grunt-contrib-connect --save-dev, npm install serve-static --save-dev

我看到一些帖子建议关闭防火墙,但是没有成功。

我知道这与我的机器或npm/node/connect版本冲突有关,因为我尝试在其他机器上运行相同的应用程序,它可以正常工作。

系统配置如下:

  • Windows 7 Professional
  • Node -v4.1.2
  • npm -v2.14.4
  • connect@3.4.0

我根据nodejs connect cannot find static的帖子安装了connect和serve-static,但问题依旧。

有帮助的吗?先谢谢了。


感谢您的解决方案,在grunt中引入serve-static后它可以工作了。 - kishorekumaru
2个回答

72
你需要安装connectserve-static
npm install --save-dev grunt-contrib-connect serve-static 

然后您需要在Gruntfile.js中导入serve-static

module.exports = function (grunt) {
  ...
  var serveStatic = require('serve-static');

  grunt.initConfig({
  ...
    connect: {
    ...
      livereload: {
        options: {
          middleware: function(connect) {
            return [
              serveStatic('.tmp'),
              connect().use('/bower_components', serveStatic('./bower_components')),
              serveStatic(config.app)
            ];
          }
        }
      }

28
从版本0.11.x开始,新的grunt-contrib-connect不再支持connect.staticconnect.directory。您应该安装serve-static(用于提供静态文件)和serve-index(用于为给定路径提供包含目录列表的页面)。
像这样:
var serveStatic = require('serve-static');
var serveIndex = require('serve-index'); 使用serveStatic代替connect.staticserveIndex代替connect.directory
grunt.initConfig({
    connect: {
        options: {
            test: {
               directory: 'somePath',
               middleware: function(connect, options){
                    var _staticPath = path.resolve(options.directory);
                    return [serveStatic(_staticPath), serveIndex(_staticPath)]
               }
            }
        }
    }
})

根据这个答案,对我来说是 require('serve-static')(.tmp) 起作用了。 - blogbydev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接