何かが足りないような気がします。
これが私が達成したいことです:
server.js
を実行し、watch
タスクを並行して実行する不快なタスクがあります。これは、うなり声が設計されたタスクの1つであるように感じますが、この構成を実現できません。
他の人の間で、私はこれを読みました: Running Node app through Grunt ですが、それでもまだ作成できません。
これが私の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"
は[email protected]
よりも高いバージョンである必要があります。
適切な構成を実現するためにご協力いただければ、大変感謝しています。しかし、より一般的には、公式のgrunt-contrib-nodemon-like
パッケージとタスクがない理由がわかりません。これは、gruntを使用するもう1つの大きな理由(ツールとして本当に気に入っている)だと感じているためです。
ありがとう
これを書いてから、ニースの人がそれを開発しました。
Grunt.util.spawnを使用して新しいプロセスを起動するのに多くの問題がありました。実行されますが、出力は返されません。おそらく、これらのドキュメントで私ができなかったことを理解できるでしょう。 http://gruntjs.com/api/grunt.util#grunt.util.spawn
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
をそのまま使用するか、
または...
彼はサーバーを子プロセスとして管理しており、あなたが探しているものかもしれません。
または...
Get grunt-Shellnpm 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の回答に基づく)。これは 発生したプロセス で grunt-nodemon を使用します。だから私はできる:
両方のタスクの出力を取得する
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 e.g.
// grunt.task.run([ 'watch' ]);
});
問題は、watchやnodemonなどのタスクが終了しないことです。そのため、gruntがそれらに到達することはありません。新しいプロセスを生成する必要があります。
これは、grunt-concurrentを使用して簡単に実行できます。
https://github.com/sindresorhus/grunt-concurrent
例えば:
module.exports = function(grunt) {
grunt.initConfig({
...
concurrent: {
dev: {
tasks: ['nodemon', 'watch'],
options: {
logConcurrentOutput: true
}
}
}
});
};
2つは幸せに並んで実行されます。