Как запустить задачу 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"
}
}