2016-10-30 4 views
1

Есть ли способ запустить задачу gulp пакета из моей задачи gulp? Вот моя структура файла:Запустить задачу gulp пакета в моей задаче gulp

Root 
| 
|-- Gulpfile.js (task: get-files) 
| 
|-- node_modules 
    | 
    |-- packageA 
      | 
      |-- gulpfile.js (task: compile-custom) 

Я хочу, чтобы запустить compile-custom задачу из packageA из моей get-files задачи в моей gulpfile. В идеале, я мог бы также получить обратный вызов из задания compile-custom, чтобы узнать, когда он будет завершен.

ответ

1

Я бы посоветовал не запускать задачу из другого gulpfile, как вы хотите, особенно из пакета node_modules. Причина, по которой это не нужно, связана с тем, что пакет может изменить/обновить, а затем сломать ваш код из-за этого.

Желательно, чтобы вы просто скопировали задание gulpfile, которое вы хотите, либо в свой gulpfile, либо включите его в свой проект, либо просто создайте новый файл, в котором вы можете легко отличить его от вашего gulpfile и просто вызвать его, потребовав его в вашем собственном gulfile, как и любой другой пакет и/или JS-функцию. При любом из этих параметров не забудьте установить зависимости в свои файлы package.json, а затем запустите npm install.


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

gulp.start('taskname')

Хотя нижеследующие следует использовать только в том случае совершенно необходимо. Кроме того, он будет устаревшим в новой версии Gulp v4 (refer to this). Способ вызова задачи - это просто создать функцию, указанную выше, и вызвать эту функцию в вашем gulpfile.


Пример функции глотком вызова:

var someFile = require('./someFile.js'); 

gulp.task('my-custom-task', function() { 
    someFile.doSomething('foo', 'bar'); 
}); 

Если функция что-то делает асинхронно, он должен вызвать функцию обратного вызова в конце, так что Глоток может знать, когда это делается:

var someFile = require('./someFile.js'); 

gulp.task('my-custom-task', function (callback) { 
    someFile.doSomething('foo', 'bar', callback); 
}); 
+0

Я могу понять беспокойство. Моя цель состояла в том, чтобы сделать это одной задачей глобализации для простоты. Мой план состоял в том, чтобы запустить 'packageA', который выводит файл в' dist' каталог 'packageA'. Оттуда я захватил этот файл и поместил его в каталог js' моего проекта, отсюда необходимость синхронных вызовов. –

+0

Если вы хотите синхронизировать вызовы, и вам нужно знать, когда закончится последняя задача, я рекомендую вам изучить модуль [Run-Sequence Module] (https://www.npmjs.com/package/run-sequence). Вы просто кладете вещи в том порядке, в котором хотите, и они будут запускаться в последовательности, где, когда вы закончите одну задачу, вы перейдете к следующей. Что в твоем случае кажется тем, чего ты хочешь. – CriCri

+0

Спасибо! Я попробую некоторое сочетание этого решения и вернусь к вам. –

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