gulp.run হ্রাস করা হয়। আমি কীভাবে কাজগুলি রচনা করব?


98

এখানে একটি রচিত টাস্কটি আমি টাস্ক নির্ভরতা দিয়ে কীভাবে এটি প্রতিস্থাপন করব তা জানি না।

...
gulp.task('watch', function () {
 var server = function(){
  gulp.run('jasmine');
  gulp.run('embed');
 };
 var client = function(){
  gulp.run('scripts');
  gulp.run('styles');
  gulp.run('copy');
  gulp.run('lint');
 };
 gulp.watch('app/*.js', server);
 gulp.watch('spec/nodejs/*.js', server);
 gulp.watch('app/backend/*.js', server);
 gulp.watch('src/admin/*.js', client);
 gulp.watch('src/admin/*.css', client);
 gulp.watch('src/geojson-index.json', function(){
  gulp.run('copygeojson');
 });
});

সংশ্লিষ্ট চেঞ্জলগ https://github.com/gulpjs/gulp/blob/master/CHANGELOG.md#35 [অবচয় গল্প.আরুন]

উত্তর:


82
gulp.task('watch', function () {
  var server = ['jasmine', 'embed'];
  var client = ['scripts', 'styles', 'copy', 'lint'];
  gulp.watch('app/*.js', server);
  gulp.watch('spec/nodejs/*.js', server);
  gulp.watch('app/backend/*.js', server);
  gulp.watch('src/admin/*.js', client);
  gulp.watch('src/admin/*.css', client);
  gulp.watch('src/geojson-index.json', ['copygeojson']);
});

কাজগুলি চালানোর জন্য আপনাকে আর কোনও ফাংশন (যদিও আপনি এখনও পারেন) পাস করার দরকার নেই। আপনি টাস্ক নামের একটি অ্যারে ঘড়ি দিতে পারেন এবং এটি আপনার জন্য এটি করবে।


13
যদি আমি দেখা শুরু করার আগে কোনও কাজ চালাতে চাই তবে কী হবে? উদাহরণস্বরূপ, আমি দেখতে চাই scripts, তবে এই মুহুর্তে এই কাজটি চালাতে বাধ্য করা (কিছু স্ক্রিপ্ট ফাইল পরিবর্তন না হওয়া পর্যন্ত অপেক্ষা করা) অর্থবোধ করে।
মনসাইনর

4
এবং সেই কাজগুলিতে যুক্তি দেওয়ার কোনও উপায় আছে কি?
ডাঃ এরনি

7
মনসিংসর জিজ্ঞাসা করা প্রশ্ন থেকে @ ক্রেল অপ্রাসঙ্গিক।
মার্ক আমেরিকা

6
@ মনসিংর এটি অর্জন করার জন্য, আপনি একটি নতুন টাস্ককে সংজ্ঞায়িত করতে পারেন যা কার্যগুলির একটি তালিকা কার্যকর করে। উদাহরণস্বরূপ, আমি সাধারণত নিম্নলিখিত ডিফল্ট টাস্কটি সংজ্ঞায়িত করি gulp.task('default', ['build', 'watch']);, যা প্রথমে তৈরি করে এবং তারপরে দেখা শুরু করে।
বাসটিয়ান ভ্যান ডেন বার্গ

4
@ বাসটিয়ানভান্ডেনবার্গ আমি ভেবেছিলাম যে সমুদ্রের কাজগুলি সমান্তরালভাবে চালানোর জন্য তৈরি করা হয়েছিল? সুতরাং আপনি প্রথমে বিল্ড তালিকাভুক্ত করা সত্ত্বেও, ওয়াচ টাস্কের আগুনের আগে এটি শেষ করতে হবে না। আমি ওপি থেকে পাচ্ছি যে তারা নিশ্চিত করতে চায় যে ঘড়ি শুরু হওয়ার আগে বিল্ড শেষ হয়েছে।
শান রায়ান

85

বা আপনি এটি করতে পারেন:

gulp.start('task1', 'task2');

4
এটি কি নিরাপদ? আমি এপিআই ডক্সে লিঙ্কটি দেখছি না (লিঙ্ক)
ফেলিক্স রাবে

4
.startএকটি অর্কেস্টেটর পদ্ধতি। যেহেতু গুলপ উত্তরাধিকার সূত্রে প্রাপ্ত তাই এটি কাজ করা উচিত। আমি একটি নন-গল্প ফাংশন (নজরদারি) থেকে একটি ঝাল কাজটি ট্রিগার করছি এবং এটি কাজ করছে বলে মনে হচ্ছে।
jomaller

24
gulp.startপরবর্তী প্রকাশে সরানো হবে: github.com/gulpjs/gulp/issues/505#issuecomment-45379280
ইয়াকার্ট

13
@ ইয়াকার্ট তাই কোনও কাজ সম্পাদন করতে আমরা কী ব্যবহার করব?
chovy

6
এটি পুনরুদ্ধার করে, বেশিরভাগ ব্যবহারগুলি npmjs.com/package/run-sequencegulp-startrun-sequence
joemaller

25

উত্স: https://github.com/gulpjs/gulp/issues/755

gulp.start()কখনও কখনও জনসাধারণী এপিআই বা ব্যবহৃত হয়নি। এবং মন্তব্যগুলিতে উপরে বর্ণিত হিসাবে, টাস্ক ম্যানেজমেন্টটি পরবর্তী প্রকাশে প্রতিস্থাপন করা হচ্ছে .... সুতরাং gulp.start()ব্রেকিং হবে।

গাল্প ডিজাইনের আসল উদ্দেশ্য হ'ল নিয়মিত জাভাস্ক্রিপ্ট ফাংশন করা এবং কেবল তাদের ডাকার জন্য কাজটি করা।

উদাহরণ:

function getJsFiles() {
    var sourcePaths = [
        './app/scripts/**/*.js',
        '!./app/scripts/**/*.spec.js',
        '!./app/scripts/app.js'
    ];

    var sources = gulp.src(sourcePaths, { read: false }).pipe(angularFilesort());

    return gulp.src('./app/index.html')
        .pipe(injector(sources, { ignorePath: 'app', addRootSlash: false }))
        .pipe(gulp.dest('./app'));
}  

gulp.task('js', function () {
    jsStream = getJsFiles();
});

12

একটি পুরানো প্রশ্ন পুনরুত্থান জন্য আমাকে ক্ষমা করুন। গৃহীত উত্তরগুলি ঘড়িগুলি সেট করার আগে চলমান কাজগুলির ইস্যুটিকে সম্বোধন করে না। পরবর্তী উত্তরটি gulp.start ব্যবহার করে যা চলেছে। তৃতীয় উত্তরটি নির্দেশ করে যে নিয়মিত ফাংশন ব্যবহার করা উচিত তবে উদাহরণটি অদ্ভুত বলে মনে হয়। আমি কিছু অনুসন্ধান করেছি কিন্তু এর সহজ উদাহরণ পাই নি।

এখানে আমার সমাধান। ধারণাটি হ'ল নিয়মিত জেএস ফাংশন সংজ্ঞায়িত করে তারপরে সেগুলি কার্য হিসাবে নিবন্ধিত করুন। ফাংশনগুলি তখন প্রয়োজনে সরাসরি প্রয়োজন হয় বা একটি ঘড়ির মধ্যে থেকে কল করা যেতে পারে।

var 
  gulp     = require('gulp'),
  concat   = require('gulp-concat'),
  markdown = require('gulp-showdown')
;
var scriptFiles   = [ 'ang/app.js' ];
var markdownFiles = [ 'content/articles/*.md'];

var watchTask = function() 
{
  buildTask();

  gulp.watch(scriptFiles,  ['scripts' ]);
  gulp.watch(markdownFiles,['markdown']);
};
gulp.task('watch',watchTask);

var buildTask = function()
{
  scriptsTask();
  markdownTask();
};
gulp.task('build',buildTask);

var markdownTask = function() 
{
  gulp.src(markdownFiles)
    .pipe(markdown())
    .pipe(gulp.dest('web/articles'));
};
gulp.task('markdown',markdownTask);

var scriptsTask = function() 
{
  gulp.src(scriptFiles)
    .pipe(concat('app.js'))
    .pipe(gulp.dest('web/js'));

  gulp.src(
    [
      'bower_components/angular/angular.min.js',
      'bower_components/angular-route/angular-route.min.js'
    ])
    .pipe(concat('vendor.js'))
    .pipe(gulp.dest('web/js'));

  gulp.src(
    [
      'bower_components/angular/angular.min.js.map',
      'bower_components/angular-route/angular-route.min.js.map'
    ])
    .pipe(gulp.dest('web/js'));
};
gulp.task('scripts', scriptsTask);

আমি দুলতে নতুন আমি সুস্পষ্ট কিছু উপেক্ষা করেছি কিনা দয়া করে আমাকে জানান।


এটি "বিল্ড" কার্য এবং "পুনর্নির্মাণ" কার্যগুলি তৈরি করা আরও সহজ করে তোলে যেখানে উভয়ই সেই ফাংশনটিকে কল করে যেটি কাজ করে তবে পরেরটি "পরিষ্কার" টাস্কের উপরও নির্ভর করে।
শেঠ

4
এটিরও সাধারণ গাল্প টাস্কের মতো একই সমস্যা নেই, জেএস সম্পূর্ণরূপে নিশ্চিত হওয়ার পূর্বে gulp.watchনির্ধারিত কাজগুলিতে এগিয়ে যাবে? আমার মনে হয় এটি এখনও একটি রেসের শর্ত, এবং ঘড়ির আগে তৈরির নিশ্চয়তা দেয় না। watchTask()buildTask()
শান রায়ান


5

যেমন @ ডিমান উল্লেখ করেছে যে, gulp.startপরবর্তী সংস্করণে ফেলে দেওয়া হবে। এছাড়াও এটি গুল্পের এই সংখ্যায় দেখা যেতে পারে ।

এবং @ পাভেল ইভস্টিগনিভের উত্তরের মন্তব্যে @ জোয়েমালার উল্লেখ করেছেন যে আমরা এই দৃশ্যে রান-সিকোয়েন্স ব্যবহার করতে পারি ।

তবে দয়া করে নোট করুন, রান-সিকোয়েন্সের লেখক বলেছেন:

এটি গল্প ৪.০ প্রকাশ না হওয়া পর্যন্ত অস্থায়ী সমাধান হিসাবে বিবেচিত যা এর সিরিজ বা সমান্তরালে টাস্ক নির্ভরতা নির্ধারণের জন্য সমর্থন করে।

সচেতন হন যে এই সমাধানটি একটি হ্যাক, এবং ভবিষ্যতে আপডেটটি কুঁচকে যাওয়ার সাথে কাজ বন্ধ করে দিতে পারে।

সুতরাং, গুল্প ৪.০ এর আগে আমরা রান সিকোয়েন্স ব্যবহার করতে পারি , ৪.০ এর পরে, আমরা কেবল গুল্প ব্যবহার করতে পারি।


3

আপনার যদি চলমান কার্যগুলির ক্রম বজায় রাখতে হয় তবে আপনি এখানে বর্ণিত নির্ভরতাগুলি সংজ্ঞায়িত করতে পারেন - আপনাকে কেবল নির্ভরতা থেকে প্রবাহটি ফিরে আসতে হবে:

gulp.task('dependency', function () {
  return gulp.src('glob')
    .pipe(plumber())
    .pipe(otherPlugin())
    .pipe(gulp.dest('destination'));
});

এটি নির্ভর করে যে কার্যটি নির্ধারণ করুন:

gulp.task('depends', [ 'dependency' ], function () {
  // do work
});

এবং এটি ঘড়ি থেকে ব্যবহার করুন:

gulp.task('watch', function () {
  watch('glob', [ 'depends' ]);
});

রান dependecyকরার আগে এখন টাস্কটি সম্পন্ন হবে depends(উদাহরণস্বরূপ আপনার 'জুঁই' এবং 'এম্বেড' কার্যগুলি নির্ভরতা হবে এবং আপনার উপর নির্ভর করবে এমন আরও একটি টাস্ক 'সার্ভার' থাকতে হবে)। কোনও হ্যাকের প্রয়োজন নেই।


বিষয়টি অফ-টক না হলে আমি নিশ্চিত নই, কারণ এটি কেবলমাত্র মন্তব্যগুলির প্রশ্নের উত্তর দেয় যা পৃথক প্রশ্ন হওয়া উচিত
klh

2

গুলপ ৪-এ কেবল আমার জন্য কাজ করা মনে হচ্ছে:

gulp.task('watch', function() {
    gulp.watch(['my-files/**/*'], gulp.series('my-func'));
});

gulp.task('my-func', function() {
    return gulp.src('[...]').pipe(gulp.dest('...'));
});

1

দেখার জন্য শুরুর আগে একটি টাস্ক চালানোর জন্য, gulp.run () বা gulp.start () ব্যবহার না করে কেবল গুল্প কমান্ডটি সোজা করে চালান।

এর পরিবর্তে:

var compress = function () {
    return gulp.src('js/vendor/*.js')
        .pipe(concat('vendor.js'))
        .pipe(gulp.dest('./build/js/'));
};

শুধু কর:

gulp.src('js/vendor/*.js')
        .pipe(concat('vendor.js'))
        .pipe(gulp.dest('./build/js/'));

অথবা আপনি সেই "উত্তর" কোডটি একটি "সাধারণ" ফাংশনে মুড়িয়ে রাখতে পারেন এবং যখনই চান কল করতে পারেন।

- একই উত্তর থেকে এই উত্তরটি দ্বারা অনুপ্রাণিত ।


0

আমি এখনও দেখতে পাচ্ছি না কীভাবে এটি আসলে হাতের কাছে প্রশ্নটি সমাধান করে।

যদি তাদের মধ্যে নির্ধারিত নির্ভরতা সহ আমার 4 টি কাজ থাকে

এ বি সি ডি

যেখানে এ বি, ইত্যাদির উপর নির্ভর করে যেমন সংজ্ঞায়িত করা হয় gulp.task('A',['B'],function A(){});এবং তারপরে আমি gulp.watch ব্যবহার করে একটি নতুন টাস্ক সংজ্ঞায়িত করি কেবল কার্য সম্পাদন নির্ভরতাগুলি নকল করে দেয়।

যেমন এই কাজগুলি দেওয়া (প্রতিটি কাজ নামের মাধ্যমে উদ্ভাসিত):

function A(){}
gulp.task('A',['B'],A);

function A(){}
gulp.task('A',['B'],A);

function B(){}
gulp.task('B',['C'],B);

function C(){}
gulp.task('C',['D'],C);

function D(){}
gulp.task('D',[],D);

আমি লিখতে পারি 1)

gulp.task('WATCHER', ['A'], function(){
   ...
}

যা A-> D নির্বাহ করবে তবে উদাহরণস্বরূপ, স্টেপ বি ব্যর্থ হলে এটি কখনই কার্যে প্রবেশ করবে না (সংকলন বা পরীক্ষার ত্রুটির কথা ভাবেন)

অথবা আমি লিখতে পারি 2)

gulp.task('WATCHER', [], function(){
   gulp.watch(...,['A'])
}

যা প্রথমে কিছু পরিবর্তন না করা পর্যন্ত এ-> ডি চালিত হবে না।

অথবা আমি লিখতে পারি 3)

gulp.task('WATCHER', [], function(){
   D();
   C();
   B();
   A();
   gulp.watch(...,['A'])
}

যা নির্ভরতা শ্রেণিবিন্যাসের সদৃশ (এবং সময়ের সাথে ত্রুটিগুলি) সৃষ্টি করবে।

পিএস: যদি কেউ ভাবছেন যে আমি নির্ভর করি যে কোনও নির্ভরশীল কাজ যদি ব্যর্থ হয় তবে আমার ঘড়ির কাজটি কার্যকর করতে চাই কেননা আমি সরাসরি বিকাশের জন্য ঘড়ি ব্যবহার করি। যেমন আমি টেস্ট ইত্যাদির কাজ শুরু করার জন্য আমার ঘড়ির কাজটি শুরু করি এবং এটি হতে পারে যে আমি যে প্রাথমিক কোডটি দিয়ে শুরু করেছি তার মধ্যে ইতিমধ্যে সমস্যা রয়েছে।

সুতরাং আমি আশা করব যে ঝাঁকুনি চলবে বা কিছু সমতুল্য কিছু সময়ের জন্য থাকবে


এই প্রত্যাবর্তনের লক্ষ্য কোন বিদ্যমান উত্তর?
মোগসদাদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.