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

How to start Gulp watch task when I type npm start

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

gulp.task('default', ['watch']);

哪个启动watch任务

gulp.task('watch', function(){
  gulp.watch(productionScripts, ['autoConcat']);
});

然后在 productionScripts 中对文件的任何保存更改,watch 任务将连接文件。

我想做的是在我的 package.json 中,我想在输入 npm start 时启动这个手表(这已经启动了我的节点服务器)。

package.json

    "start": "node server.js",

更新--------

Ben(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'...

这就像服务器因更改而重新启动与串联文件更改之间存在循环。

我的一个项目中有这样的东西。请注意,它会将两个进程置于后台 - 您可以使用 ps 获取 ID 并使用 kill <pid>.

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

也要禁用日志记录:

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

您可以从您的 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"
}

要考虑的一个最佳做法是使用 nodemon and 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"
    }
}

您可以使用包 concurrentlystart 中的多个任务连接到 package.json 中:

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

和 运行 npm start 来自您的终端。这将执行 start.

内的所有语句

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

编辑:

正如@Josh 在评论中指出的那样,CLI 名称现在与包名称匹配。因此,您可以将脚本编写为:

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