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

时间:2015-01-19 17:04:01

标签: node.js gulp package.json

我有一个包含以下内容的gulp.js文件:

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

启动监视任务

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

然后,对于bioScripts中文件的任何已保存更改,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'...

在服务器重新启动更改和连接文件更改之间存在循环。

4 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:9)

您可以使用包startpackage.json concurrently中连接多个任务:

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

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

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

答案 2 :(得分:6)

我的一个项目中有类似的东西。请注意,它会介绍两个流程 - 您可以使用ps获取ID并使用kill <pid>停止。

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

也要禁用日志记录:

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

答案 3 :(得分:6)

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