我觉得我失去了一些东西。
下面是我想达到的目标:
具有执行我的一个咕噜任务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
包和任务,因为我感觉这将是另一个伟大的理由来使用咕噜(我真的很喜欢作为一个工具!)
谢谢
编辑: 咕噜-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
我真诚地希望帮助。 祝好运!
您好我也遇到了这个问题,这里是我的解决方案(基于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' ]); });
使用咕噜并发
问题是,像手表,nodemon任务不会终止,所以呼噜声永远达不到他们。 你需要产生新的进程。
为此,您可以轻松地使用咕噜并发:
https://github.com/sindresorhus/grunt-concurrent
例如:
module.exports = function(grunt) {
grunt.initConfig({
...
concurrent: {
dev: {
tasks: ['nodemon', 'watch'],
options: {
logConcurrentOutput: true
}
}
}
});
};
两人将现在一边兴高采烈地跑一边。