在咕噜Nodemon样的任务:执行节点的过程和观看(Nodemon-like task in Gru

2019-08-17 07:53发布

我觉得我失去了一些东西。

下面是我想达到的目标:

具有执行我的一个咕噜任务server.js和运行watch任务并行。 这种感觉,我认为这恰恰是咕噜设计的任务之一,但我不能做到这一点的配置。

其中,我看过这样的: 通过咕噜运行节点的应用程序 ,但我仍然无法做到这一点。

这里是我的Gruntfile.js:

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    watch: {
      scripts: {
        files: ['*.js'],
        tasks: ['start'],
        options: {
          nospawn: true
        }
      }
    }
  });

  grunt.loadNpmTasks('grunt-contrib-watch');

  grunt.registerTask('start', function() {
    grunt.util.spawn({
      cmd: 'node',
      args: ['server.js']
    });
    grunt.task.run('watch');
  });

  grunt.registerTask('default', 'start');
};

我有"grunt-contrib-watch": "~0.3.1"这应该是更高版本比grunt-contrib-watch@0.3.0如前面提到的职位。

如果你能帮助我实现了正确的配置,我将非常感谢。 但更一般的,我不明白为什么没有正式的grunt-contrib-nodemon-like包和任务,因为我感觉这将是另一个伟大的理由来使用咕噜(我真的很喜欢作为一个工具!)

谢谢

Answer 1:

编辑: 咕噜-nodemon

因为写这个,一个不错的人开发的。


我在使用grunt.util.spawn火关新流程很麻烦。 他们会跑,但他们不会给我任何输出了。 也许你可以找出我不能在这些文档。 http://gruntjs.com/api/grunt.util#grunt.util.spawn

有两个问题我跟你有什么看:

  • 我认为grunt.registerTask()有,当你使用一个回调函数来运行你的任务是采取三个参数。
  • 我不认为你可以叫node server.js一遍又一遍,每次文件更改。 它将工作在第一时间,为它真正的工作你必须管理的服务器作为一个子进程,杀戮和重新启动它的后续文件的变化。

对于registerTask参数试试这个,只是为了看看,如果你能得到的东西在你目前的实施工作。

http://gruntjs.com/api/grunt.task#grunt.task.registertask

这需要(taskName, description, taskFunction)像这样:

grunt.registerTask('start', 'My start task description', function() {
  grunt.util.spawn({
    cmd: 'node',
    args: ['server.js']
  });
  grunt.task.run('watch');
});

这可能至少让你的watch运行node server.js第一次文件更改。

这里是我会做什么来代替。

要么只使用nodemon $ nodemon server.js原样

要么...

阅读的来源和使用咕噜-发展

他在管理服务器作为一个子进程,可能是你在找什么。

要么...

获取咕噜壳
npm install grunt-shell --save-dev

并用它来运行nodemon为您提供:

module.exports = function(grunt) {

  // Project configuration.
  grunt.initConfig({
    serverFile: 'server.js',
    shell: {
      nodemon: {
        command: 'nodemon <%= serverFile %>',
        options: {
          stdout: true,
          stderr: true
        }
      }
    },
    watch: { /* nothing to do in watch anymore */ }
  });

  grunt.loadNpmTasks('grunt-contrib-watch');
  grunt.loadNpmTasks('grunt-shell');

  grunt.registerTask('default', 'shell:nodemon');
};

$ grunt shell:nodemon

我真诚地希望帮助。 祝好运!



Answer 2:

您好我也遇到了这个问题,这里是我的解决方案(基于nackjicholson的答案)。 这将使用咕噜-nodemon在衍生的进程 。 这样我就可以:

  • 刷新的NodeJS
  • 留意变化,例如.LESS文件
  • 获得的这两项任务输出

     grunt.loadNpmTasks('grunt-nodemon'); grunt.initConfig({ nodemon: { dev: { options: { file: 'server.js', nodeArgs: ['--debug'], env: { PORT: '8282' } } } }, }); grunt.registerTask('server', function (target) { // Running nodejs in a different process and displaying output on the main console var nodemon = grunt.util.spawn({ cmd: 'grunt', grunt: true, args: 'nodemon' }); nodemon.stdout.pipe(process.stdout); nodemon.stderr.pipe(process.stderr); // here you can run other tasks eg // grunt.task.run([ 'watch' ]); }); 


Answer 3:

使用咕噜并发

问题是,像手表,nodemon任务不会终止,所以呼噜声永远达不到他们。 你需要产生新的进程。

为此,您可以轻松地使用咕噜并发:

https://github.com/sindresorhus/grunt-concurrent

例如:

module.exports = function(grunt) {
  grunt.initConfig({

    ...

    concurrent: {
      dev: {
        tasks: ['nodemon', 'watch'],
        options: {
          logConcurrentOutput: true
        }
      }
    }
  });
};

两人将现在一边兴高采烈地跑一边。



文章来源: Nodemon-like task in Grunt : execute node process and watch