Задача Gulp никогда не определялась: по умолчанию. В дереве нет задачи по умолчанию

Я пытаюсь модернизировать старый gulpfile для запуска процессов, но сталкиваюсь с проблемами. Когда я запускаю глоток:

PS C:\Users\me\Desktop\_REPOS\gknode> gulp
[18:42:50] Using gulpfile ~\Desktop\_REPOS\gknode\gulpfile.js
[18:42:50] Task never defined: default

gulpfile.js

gulp=require('gulp')

//Because gulp.task(name, deps, func) was replaced by gulp.task(name, gulp.{series|parallel}(deps, func))

gulp.task('node-server-start', gulp.series(
  function (cb) {spawn('node', ['nodeapi/nodeapi.js'], {stdio: 'inherit'}) }
  )
);
gulp.task('ng-serve', gulp.series(
  function (cb) {spawn('ng', ['serve'], {stdio: 'inherit'}) }
  )
);
gulp.task('start', gulp.parallel(['ng-serve', 'node-server-start'], function () {console.log('both servers launched on localhost:4200')}));

Дерево задач:

PS C:\Users\me\Desktop\_REPOS\gknode> gulp --tasks
[18:43:00] Tasks for ~\Desktop\_REPOS\gknode\gulpfile.js
[18:43:00] ├─┬ node-server-start
[18:43:00] │ └─┬ <series>
[18:43:00] │   └── <anonymous>
[18:43:00] ├─┬ ng-serve
[18:43:00] │ └─┬ <series>
[18:43:00] │   └── <anonymous>
[18:43:00] └─┬ start
[18:43:00]   └─┬ <parallel>
[18:43:00]     ├─┬ ng-serve
[18:43:00]     │ └─┬ <series>
[18:43:00]     │   └── <anonymous>
[18:43:00]     ├─┬ node-server-start
[18:43:00]     │ └─┬ <series>
[18:43:00]     │   └── <anonymous>
[18:43:00]     └── <anonymous>

Является ли моя проблема анонимной задачей в конце стартовой задачи?


person Rilcon42    schedule 04.04.2019    source источник


Ответы (1)


Чтобы иметь возможность запускать только gulp, вам нужно указать задачу с именем default. Некоторые другие моменты:

  • Вам не нужно оборачивать одну функцию задачи в gulp.series.
  • gulp.parallel ожидает список функций задачи (имена или анонимные функции), а не массив.
  • Вы можете столкнуться с проблемами, когда эти обратные вызовы, указанные для функции задачи порождения сервера, никогда не вызываются.

Последний пункт может быть ненужным, чтобы заставить код работать, но я включил его в следующее, что должно выполнить работу:

const gulp = require('gulp');
const { spawn } = require('child_process');

gulp.task('node-server-start', function(cb) {
    const server = spawn('node', ['nodeapi/nodeapi.js'], { stdio: 'inherit' });
    server.on('close', () => cb());
});

gulp.task('ng-serve', function(cb) {
    const server = spawn(
        /^win/.test(process.platform) ? 'ng.cmd' : 'ng',
        ['serve'],
        { stdio: 'inherit' }
    );
    server.on('close', () => cb());
});

gulp.task(
    'start',
    gulp.parallel('ng-serve', 'node-server-start', function(cb) {
        console.log('both servers launched on localhost:4200');
        cb();
    })
);

gulp.task('default', gulp.series('start'));

Обновление:

Обновлено решением, не зависящим от платформы.

person Zweihänder    schedule 05.04.2019
comment
Я получаю: both servers launched on localhost:4200 [23:08:16] Finished '<anonymous>' after 6.23 ms [23:08:16] 'ng-serve' errored after 8.45 ms [23:08:16] Error: spawn ng ENOENT at Process.ChildProcess._handle.onexit (internal/child_process.js:240:19) at onErrorNT (internal/child_process.js:415:16) at process._tickCallback (internal/process/next_tick.js:63:19) [23:08:16] 'start' errored after 9.85 ms [23:08:16] 'default' errored after 15 ms [23:08:16] The following tasks did not complete: node-server-start [23:08:16] Did you forget to signal async completion? - person Rilcon42; 05.04.2019
comment
мне нужно добавить что-то об асинхронном завершении, или я должен задать новый вопрос, чтобы решить эту проблему? - person Rilcon42; 05.04.2019
comment
Может быть связано с этой проблемой – обновил ответ с помощью более независимое от платформы решение. Со строками server.on('close', () => cb()); это должно помочь с асинхронным завершением. Вы получили сообщение об ошибке spawn, говорящее, что не может найти команду ng для создания. Строка асинхронного завершения в конце должна разрешиться после сортировки. - person Zweihänder; 05.04.2019