2015-01-19 8 views
11

У меня есть файл gulp.js, который включает в себя:Как начать Глоток смотреть задачу, когда я типа NPM начать

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

Который запускает часы задачу

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

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

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

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

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

+0

использование 'глоток watch' вместо этого и связать запуск и перезагрузку сервера в процесс часов глотка, таким образом, когда вы меняете код для вашего сервера, глоток перезапустит его. –

+0

вместо npm начать вы рекомендуете глотать «myFunctionName» с сервером, начинающим глотать? У вас есть пример? – SoEzPz

+0

Не знаю, я просто знаю, что это определенно возможно. –

ответ

17

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

вы бы не узнали, как вернуть сервер обратно? – SoEzPz

+0

'child_process.spawn()' возвращает объект 'ChildProcess', который имеет потоки' stdout' и 'stderr'. Вы можете направить эти потоки где-нибудь, например. в файл. Я приведу пример моего ответа. – Ben

6

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

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

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

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

Что второе и для? – SoEzPz

+0

Без этого команда будет работать с ошибкой «ELIFECYCLE»; вам нужно выполнить оба задания в одной команде. – Ben

4

Рекомендуется использовать nodemon и gulp-nodemon, а затем, как и принятый ответ, вызвать скрипт gulp от npm с помощью 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!') 
     }); 
}); 

package.json

{ 
    ... 

    "scripts": { 
     "start": "gulp start" 
    }, 
    "devDependencies": { 
     "gulp": "^3.9.0", 
     "gulp-nodemon": "^2.0.4" 
    } 
} 
8

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

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

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

Для справки: https://www.npmjs.com/package/concurrently

+0

Не должно быть «одновременно», а не «параллельным»? –

+0

Имя пакета - 'одновременно. Команда, используемая для выполнения пакета, является 'concurrent'. – nashcheez

+0

@nashcheez Я сделал, но на npm start scss не компилируется в css, как и должно быть. Вот код в package.json: «start»: «одновременно» npm run tsc: w \ "\" npm run lite \ "\" gulp \ "", –

 Смежные вопросы

  • Нет связанных вопросов^_^