جافاسكريبت - مهمة Gulp.js، هل يتم الإرجاع في src؟
أنا جديد على جلب وقد كنت أبحث من خلال إعدادات الأمثلة. بعض الأشخاص لديهم البنية التالية:
gulp.task("XXXX", function() {
gulp.src("....
لدى أشخاص آخرين هذا:
gulp.task("XXXX", function() {
return gulp.src("....
أتساءل ما الفرق الذي يحدثه العودة في src؟
الإجابة رقم 1
تقوم باستخدام return للإشارة إلى أن المهمة غير متزامنة. gulp.src() تُرجع تدفقًا، لذا فهي غير متزامنة.
بدونه، لن يعرف نظام المهام متى انتهى. اقرأ الوثائق.
الإجابة رقم 2
إذا كان لديك مهام تعتمد على مهام أخرى، تحتاج إلى إرجاع التدفق حتى تنتظر المهام المهام التابعة لها لتكتمل قبل أن تعمل هي نفسها.
على سبيل المثال
// without return
gulp.task('task1', function() {
gulp.src('src/coffee/*.coffee')
/* eg compile coffeescript here */
.pipe(gulp.dest('src'));
});
gulp.task('task2', ['task1'], function() {
gulp.src('src/*.js')
/* eg minfify js here */
.pipe(gulp.dest('dest'));
});
في هذا المثال قد تتوقع أن يكتمل task1 (مثل تجميع الكوفي سكريبت أو أي شيء آخر) قبل أن يتم تشغيل task2... ولكن ما لم نضف return - مثل المثال أدناه - فإنهما سيعملان بشكل متزامن وليس غير متزامن؛ ولن يتم تصغير الكوفي سكريبت المجمّع لأن task2 لن تنتظر انتهاء task1 وبالتالي لن تتمكن من الحصول على الناتج المجمّع لـ task1. لذلك يجب علينا دائمًا استخدام return في هذه الظروف.
// with return
gulp.task('task1', function() {
return gulp.src('**/*.coffee')
/* your operations here */
.pipe(gulp.dest('dest'));
});
gulp.task('task2', ['task1'], function() {
return gulp.src('**/*.js')
/* your operations here */
.pipe(gulp.dest('dest'));
});
تعديل: تشرح الوصفة هنا الأمر بمزيد من التفصيل. https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-tasks-in-series.md
الإجابة رقم 3
وجدت هذا مفيدًا، إذا كان لديك عدة تدفقات لكل مهمة. تحتاج إلى دمج/جمع التدفقات المتعددة وإرجاعها.
var gulp = require('gulp');
var merge = require('gulp-merge');
gulp.task('test', function() {
var bootstrap = gulp.src('bootstrap/js/*.js')
.pipe(gulp.dest('public/bootstrap'));
var jquery = gulp.src('jquery.cookie/jquery.cookie.js')
.pipe(gulp.dest('public/jquery'));
return merge(bootstrap, jquery);
});
البديل، باستخدام هيكل تعريف مهمة Gulp، سيكون:
var gulp = require('gulp');
gulp.task('bootstrap', function() {
return gulp.src('bootstrap/js/*.js')
.pipe(gulp.dest('public/bootstrap'));
});
gulp.task('jquery', function() {
return gulp.src('jquery.cookie/jquery.cookie.js')
.pipe(gulp.dest('public/jquery'));
});
gulp.task('test', ['bootstrap', 'jquery']);
