2

不幸的是,grunt-contrib-watchgrunt-contrib-connect似乎表现不佳。

在 grunt-contrib-connect自述文件中它说:

请注意,该服务器仅在 grunt 运行时运行。一旦 grunt 的任务完成,Web 服务器就会停止。可以使用 keepalive 选项更改此行为,并且可以通过运行诸如 grunt connect::keepalive 之类的任务来临时启用此行为。

美好的。但是,如果我想与连接服务器一起运行我的监视任务怎么办?像这样:

connect: {
  server: {
    options: {
      port: 8000,
      hostname: 'localhost',
      keepalive: true
    }
  }
},
watch: {
  options: {
    livereload: true
  },
  files: ['**'],
  tasks: ['connect'],
}

在这里,connect任务在文件更改时运行。如果我将 connect 的keepalive选项设置为 true,则 grunt-contrib-watch 将停止观看,因为它在技术上还没有完成它的任务。如果我伪造了该keepalive选项,那么连接服务器在完成任务后就会死机。

是的,我可以运行命令...

$ grunt connect
$ grunt watch

...在单独的外壳中,但是没有办法用一个命令运行它们吗?

4

2 回答 2

3

grunt-contrib-watch中的Livereload 在下面的端口通知文件的更改,您可以看到它位于 35729。

另一方面,grunt-contrib-connect中的 livereload 监听端口 35729 的变化。

所以我们应该将它们配置为 -

connect: {
  server: {
    options: {
      port: 8000,
      hostname: 'localhost',
      livereload: 35729
    }
  }
},
watch: {
  options: {
    livereload: 35729
  },
  files: ['**'],
  tasks: []
}

您无需在此处提供“连接”作为任务。由于重新加载的工作是由 livereload 这里完成的。现在,为了使这两个使用单个命令,我们将它们注册为 -

grunt.registerTask("server", ["connect", "watch"]);

现在运行连接,然后运行监视。现在通常 registerTasks 通过完成第一个任务然后第二个任务等来工作。但是由于您所说的 connect 行为 -

请注意,此服务器仅在 grunt 运行时运行

Connect 只运行一次。但是 watch 将继续运行以寻找更改(保持 grunt 运行),从而保持连接服务器正常运行。

现在当你尝试

grunt server

事情会像魅力一样发挥作用。

于 2016-06-06T05:32:38.380 回答
0

我使用grunt-nodemon,它将 watch 和 nodejs 启动器封装在一个任务中:

nodemon: {
  dev: {
    script: 'app.js',
    options: {
      ignore: [
        'node_modules/**',
        'public/**'
      ],
      ext: 'js'
    }
  }
}

然后执行:

$ grunt nodemon:dev

现在,nodemon 仅使用 nodejs 启动 app.js 脚本,因此您将需要一个小的 app.js 来加载静态静态快速服务器:

var express = require('express');
var server = express(); // better instead
server.configure(function(){
  server.use(express.static(__dirname + '/public'));
});

server.listen(3000);
于 2014-11-27T00:35:18.360 回答