Как запустить задачу Gulp для просмотра при вводе npm start

У меня есть файл gulp.js, который включает в себя:

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

Запуск задачи просмотра

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

Затем при любых сохраненных изменениях в файлах в файлах productionScripts задача просмотра будет конкатенировать файлы.

Что бы я хотел сделать, это в моем пакете. json, я хотел бы включить эти часы, когда я набираю npm start (это уже запускает мой сервер node).

package.json

    "start": "node server.js",

UPDATE --------

Бен (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'...

Это похоже на цикл между перезапуском сервера при изменении и сменой конкатенированного файла.

Ответ 1

Вы можете запустить свой сервер из своего 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"
}

Ответ 2

Вы можете объединить несколько задач в start в package.json с помощью пакета concurrently как такового:

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

И запустите npm start с вашего терминала. Это выполнило бы все инструкции в start.

Ссылки: https://www.npmjs.com/package/concurrently

Ответ 3

У меня есть что-то подобное в одном из моих проектов. Обратите внимание, что это будет фоном обоих процессов - вы можете использовать ps для получения идентификатора и остановки его с помощью kill <pid>.

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

Чтобы отключить ведение журнала, также:

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

Ответ 4

Рекомендуется рассмотреть nodemon и gulp-nodemon, а затем, как и принятый ответ, вызовите gulp script из npm с помощью npm start. Он быстро вспыхивает, и вы перезагружаете сервер node при изменении файла. Например:

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