web-dev-qa-db-ja.com

npmstartと入力したときにGulpwatchタスクを開始する方法

以下を含む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'...

これは、サーバーが変更時に再起動してから、連結されたファイルが変更されるまでの間にループがあるようなものです。

12
SoEzPz

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"
}
20
Ben

パッケージstartを次のように使用して、package.jsonconcurrently内の複数のタスクを連結できます。

{
  "start": "concurrent \"node server.js\" \"gulp\" "
}

そして、端末からnpm startを実行します。これにより、start内のすべてのステートメントが実行されます。

参考情報: https://www.npmjs.com/package/concurrently

9
nashcheez

私のプロジェクトの1つにこのようなものがあります。両方のプロセスのバックグラウンドになることに注意してください。psを使用してIDを取得し、kill <pid>で停止できます。

"scripts": {
    "start": "{ gulp watch & node server.js & }"
}

ロギングも無効にするには:

"scripts": {
    "start": "{ gulp watch --silent & node server.js & }"
}
6
Ben

考慮すべきベストプラクティスの1つは、 nodemongulp-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"
    }
}
6
JoshuaDavid