以下を含むgulp.jsファイルがあります。
gulp.task('default', ['watch']);
これは監視タスクを起動します
gulp.task('watch', function(){
gulp.watch(productionScripts, ['autoConcat']);
});
次に、productionScripts内のファイルに保存された変更について、監視タスクがファイルを連結します。
私がやりたいのは、package.jsonにあり、npm startと入力したときにこのウォッチをスプールしたいと思います(これにより、ノードサーバーが既に起動しています)。
package.json
"start": "node server.js",
[〜#〜]更新[〜#〜] --------
ベン(b3nj4m.com)、私はあなたが言ったことを試しました。時計とサーバーが起動します。ただし、すべてが2回実行されます(おそらく、関連性のないエディターが原因)、gulpで起動するとサーバーログが失われます。
[15:31:18] Starting 'autoConcat'...
[15:31:18] Finished 'autoConcat' after 147 ms
[15:31:19] Starting 'autoConcat'...
[15:31:19] Finished 'autoConcat' after 138 ms
[15:31:20] Starting 'autoConcat'...
[15:31:20] Finished 'autoConcat' after 127 ms
[15:31:23] Starting 'autoConcat'...
これは、サーバーが変更時に再起動してから、連結されたファイルが変更されるまでの間にループがあるようなものです。
Gulpfileからサーバーを実行できます。
var child = require('child_process');
var fs = require('fs');
gulp.task('default', ['server', 'watch']);
gulp.task('server', function() {
var server = child.spawn('node', ['server.js']);
var log = fs.createWriteStream('server.log', {flags: 'a'});
server.stdout.pipe(log);
server.stderr.pipe(log);
});
gulp.task('watch', function(){
gulp.watch(productionScripts, ['autoConcat']);
});
次に、npm start
定義を次のように変更します。
"scripts": {
"start": "gulp"
}
パッケージstart
を次のように使用して、package.json
のconcurrently
内の複数のタスクを連結できます。
{
"start": "concurrent \"node server.js\" \"gulp\" "
}
そして、端末からnpm start
を実行します。これにより、start
内のすべてのステートメントが実行されます。
私のプロジェクトの1つにこのようなものがあります。両方のプロセスのバックグラウンドになることに注意してください。ps
を使用してIDを取得し、kill <pid>
で停止できます。
"scripts": {
"start": "{ gulp watch & node server.js & }"
}
ロギングも無効にするには:
"scripts": {
"start": "{ gulp watch --silent & node server.js & }"
}
考慮すべきベストプラクティスの1つは、 nodemon と gulp-nodemon を使用し、受け入れられた回答と同様に、npm start
を使用してnpmからgulpスクリプトをトリガーすることです。それは非常に速く、ファイルの変更時にノードサーバーが再起動します。例えば:
gulpfile.js
var gulp = require('gulp');
var nodemon = require('gulp-nodemon');
...
var nodemonOptions = {
script: 'bin/www.js',
ext: 'js',
env: { 'NODE_ENV': 'development' },
verbose: false,
ignore: [],
watch: ['bin/*', 'routes/*', 'app.js']
};
gulp.task('start', function () {
nodemon(nodemonOptions)
.on('restart', function () {
console.log('restarted!')
});
});
package.json
{
...
"scripts": {
"start": "gulp start"
},
"devDependencies": {
"gulp": "^3.9.0",
"gulp-nodemon": "^2.0.4"
}
}