监视、重新编译和重新启动 [英] Watch, recompile, and restart

查看:29
本文介绍了监视、重新编译和重新启动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在到处寻找使用Grunt的监视模块在发生文件更改时按顺序执行几个步骤的方法示例。我还没有找到一个很好的例子,所以如果有人能给我指出正确的方向,那就太好了。

  1. 生成TypeScript项目(我正在运行此项目)
  2. 监视目录中的文件更改(这也适用)
  3. 开始在节点进程中运行编译后的JavaScript,同时仍在监视文件更改(通过Grunt执行此操作的最佳方式是什么?监视模块似乎启动了重新编译任务(OK)
  4. 在文件更改时,停止其他正在运行的进程,重新编译,并在完成时重新启动。继续关注变化(对此一无所知-重新启动是棘手的部分!)

我尝试了几种不同的方法,比如使用Grunt启动子进程,但最终总是出现进程挂起、端口锁定、错误定向的stdio或其他问题。如果Grunt进程退出,我希望子进程被终止。

有没有处理这件事的好办法?谢谢!

推荐答案

我最终不得不使用子进程滚动自己的进程。Nodemon将从发生时起在挡路上观察,并且不够灵活,无法处理重新编译步骤。

这是我的Gruntfile,使用监视、复制、清理和TypeScript模块。

var loader = require('load-grunt-tasks');
var cp = require('child_process');

module.exports = function (grunt) {
  loader(grunt, {});

  grunt.initConfig({
    tsFiles: [
      "**/*.ts",
      "!typings/**/*.ts",
      "typings/tsd.d.ts",
      "!build/**/*.ts",
      "!bower_modules/**/*.ts",
      "!node_modules/**/*.ts",
    ],
    buildDir: 'build/',

    clean: {
      build: '<%= buildDir %>'
    },

    ts: {
      build: {
        src: [
          "**/*.ts",
          "!typings/**/*.ts",
          "typings/tsd.d.ts",
          "!build/**/*.ts",
          "!bower_modules/**/*.ts",
          "!node_modules/**/*.ts",
        ],
        outDir: '<%= buildDir %>',
        options: {
          "target": 'ES5',
          "module": 'commonjs',
          "sourceMap": true,
        }
      }
    },

    copy: {
      build: {
        expand: true,
        cwd: './',
        src: [
          '*.json',
          'config/**/*.json',
          'test/**/*.js'
        ],
        dest: '<%= buildDir %>/',
        filter: 'isFile'
      }
    },

    watch: {
      run: {
        files: [
          '**/*.ts',
          '**/*.js',
          '**/*.json',
          '!.*/**/*.*',
          '!build/**/*.*',
          '!node_modules/**/*.*',
          '!logs/**/*.*'
        ],
        tasks: ['server-stop', 'build', 'server-restart'],
        options: {
          spawn: false
        }
      }
    }
  });

  var child = null;
  function killChild(){
    if (child){
      child.kill();
      child.disconnect();
      child = null;
    }    
  }

  grunt.registerTask('server-stop', 'Stop the dev server', function(){
    killChild();
  });

  grunt.registerTask('server-restart', 'Stop the dev server', function(){
    killChild();
    child = cp.fork('./build/app.js');
  });

  grunt.registerTask('build', ['copy', 'ts']);
  grunt.registerTask('rebuild', ['clean', 'build']);
  grunt.registerTask('default', ['rebuild']);
  grunt.registerTask('run', ['default', 'server-restart', 'watch']);
};

这篇关于监视、重新编译和重新启动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆