当我键入npm start时如何启动Gulp watch任务

SoE*_*zPz 12 node.js gulp package.json

我有一个gulp.js文件,其中包括:

gulp.task('default', ['watch']);
Run Code Online (Sandbox Code Playgroud)

这启动了监视任务

gulp.task('watch', function(){
  gulp.watch(productionScripts, ['autoConcat']);
});
Run Code Online (Sandbox Code Playgroud)

然后,对于bioScripts中文件的任何已保存更改,监视任务将连接文件.

我想做的是,在我的package.json中,当我输入npm start时,我希望将这个监视器调高(这已经启动了我的节点服务器).

的package.json

    "start": "node server.js",
Run Code Online (Sandbox Code Playgroud)

更新 --------

本(b3nj4m.com),我试过你所说的.手表和服务器启动.但是,一切都运行两次(可能是由于编辑器,而不是相关的),但是当我用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'...
Run Code Online (Sandbox Code Playgroud)

这就像服务器在更改时重新启动和连接文件更改之间存在循环.

Ben*_*Ben 20

您可以从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']);
});
Run Code Online (Sandbox Code Playgroud)

然后将您的npm start定义更改为:

"scripts": {
  "start": "gulp"
}
Run Code Online (Sandbox Code Playgroud)


nas*_*eez 10

您可以使用包来连接您的startin package.json中的多个任务concurrently:

{
  "start": "concurrent \"node server.js\" \"gulp\" "
}
Run Code Online (Sandbox Code Playgroud)

npm start从您的终端运行.这将执行其中的所有语句start.

供参考:https://www.npmjs.com/package/concurrently


Ben*_*Ben 6

我的一个项目中有类似的东西.请注意,它将对两个进程进行后台处理 - 您可以使用它ps来获取ID并将其停止kill <pid>.

"scripts": {
    "start": "{ gulp watch & node server.js & }"
}
Run Code Online (Sandbox Code Playgroud)

要禁用日志记录:

"scripts": {
    "start": "{ gulp watch --silent & node server.js & }"
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*vid 6

要考虑的一个最佳实践是使用nodemongulp -nodemon然后喜欢接受的答案,从npm触发gulp脚本npm start.它非常快速,您可以在文件更改时重新启动节点服务器.例如:

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!')
        });
});
Run Code Online (Sandbox Code Playgroud)

的package.json

{
    ...

    "scripts": {
        "start": "gulp start"
    },
    "devDependencies": {
        "gulp": "^3.9.0",
        "gulp-nodemon": "^2.0.4"
    }
}
Run Code Online (Sandbox Code Playgroud)