监视、重新编译和重新启动 [英] Watch, recompile, and restart
本文介绍了监视、重新编译和重新启动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我一直在到处寻找使用Grunt的监视模块在发生文件更改时按顺序执行几个步骤的方法示例。我还没有找到一个很好的例子,所以如果有人能给我指出正确的方向,那就太好了。
- 生成TypeScript项目(我正在运行此项目)
- 监视目录中的文件更改(这也适用)
- 开始在节点进程中运行编译后的JavaScript,同时仍在监视文件更改(通过Grunt执行此操作的最佳方式是什么?监视模块似乎启动了重新编译任务(OK)
- 在文件更改时,停止其他正在运行的进程,重新编译,并在完成时重新启动。继续关注变化(对此一无所知-重新启动是棘手的部分!)
我尝试了几种不同的方法,比如使用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屋!
查看全文