12

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

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

哪个启动监视任务

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

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

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

包.json

    "start": "node server.js",

更新--------

本(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

4 回答 4

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']);
});

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

"scripts": {
  "start": "gulp"
}
于 2015-01-19T20:20:55.560 回答
11

您可以像这样使用包连接start多个package.json任务concurrently

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

npm start从您的终端运行。这将执行start.

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

编辑

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

{
   "start": "concurrently \"node server.js\" \"gulp\" "
}
于 2015-12-24T08:38:19.757 回答
6

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

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

要禁用日志记录,也:

"scripts": {
    "start": "{ gulp watch --silent & node server.js & }"
}
于 2015-01-19T20:17:10.093 回答
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!')
        });
});

包.json

{
    ...

    "scripts": {
        "start": "gulp start"
    },
    "devDependencies": {
        "gulp": "^3.9.0",
        "gulp-nodemon": "^2.0.4"
    }
}
于 2015-10-26T10:27:40.350 回答