গুলপ টাস্কে প্যারামিটার পাস করুন


194

সাধারণত আমরা কনসোল থেকে ঝাঁকুনি টাস্কের মতো কিছু চালাতে পারি gulp mytask। আমি কি টাস্ক টাস্ক থেকে প্যারামিটারে যেতে পারি তা কি এখনও আছে? যদি সম্ভব হয় তবে দয়া করে এটি কীভাবে করা যায় তা উদাহরণ দিন।



উত্তর:


269

এটি একটি বৈশিষ্ট্য প্রোগ্রাম ছাড়া থাকতে পারে না। আপনি ইয়ার্জ চেষ্টা করতে পারেন ।

npm install --save-dev yargs

আপনি এটি এর মতো ব্যবহার করতে পারেন:

gulp mytask --production --test 1234

কোডে, উদাহরণস্বরূপ:

var argv = require('yargs').argv;
var isProduction = (argv.production === undefined) ? false : true;

আপনার বোঝার জন্য:

> gulp watch
console.log(argv.production === undefined);  <-- true
console.log(argv.test === undefined);        <-- true

> gulp watch --production
console.log(argv.production === undefined);  <-- false
console.log(argv.production);                <-- true
console.log(argv.test === undefined);        <-- true
console.log(argv.test);                      <-- undefined

> gulp watch --production --test 1234
console.log(argv.production === undefined);  <-- false
console.log(argv.production);                <-- true
console.log(argv.test === undefined);        <-- false
console.log(argv.test);                      <-- 1234

আশা করি আপনি এখান থেকে নিতে পারেন।

আরও একটি প্লাগইন রয়েছে যা আপনি ব্যবহার করতে পারেন, মিনিমিস্ট। এখানে আরও একটি পোস্ট রয়েছে যেখানে ইয়ার্জ এবং মিনিমিস্ট উভয়ের পক্ষে ভাল উদাহরণ রয়েছে: (গুলপকে এটি আলাদাভাবে কাজ চালানোর জন্য কোনও পতাকা দেওয়া সম্ভব? )


13
সত্যিই ভাল উত্তর, উদাহরণের জন্য ধন্যবাদ!
অ্যালেন রাইস

কিভাবে একজন জাভাস্ক্রিপ্ট এ অ্যাক্সেস করতে পারে?
ভিনি

আপনি যদি ইয়ার্জ সহ ঝাল ব্যবহার করেন তবে নিম্নলিখিতটি লক্ষ্য করুন: আপনার যদি কোনও 'গ্রাহক' কাজ থাকে এবং প্রয়োজনীয় কমান্ডগুলির জন্য প্যারামিটারে পরীক্ষা করে ইয়ার্গস বিল্ড ব্যবহার করতে না চান: কমান্ড ("গ্রাহক", "গ্রাহক ডিরেক্টরি তৈরি করুন")
সোথার

: প্রয়োজনীয় 'কমান্ড' একসঙ্গে নি: শ্বাসে সঙ্গে জন্য yargs পরামিতি চেক সালে নির্মিত ব্যবহার করতে চান, তাহলে নীচের আমার মন্তব্য দেখুন stackoverflow.com/a/41412558/1256697
suther

5
(argv.production === undefined) ? false : true;সমতূল্য argv.production !== undefined
সিজেস্টুয়ার্ট

136

আপনি যদি অতিরিক্ত নির্ভরতা যুক্ত করা এড়াতে চান তবে আমি নোডকে process.argvদরকারী বলে মনে করেছি:

gulp.task('mytask', function() {
    console.log(process.argv);
});

সুতরাং নিম্নলিখিত:

gulp mytask --option 123

প্রদর্শন করা উচিত:

[ 'node', 'path/to/gulp.js', 'mytask', '--option', '123']

যদি আপনি নিশ্চিত হন যে পছন্দসই প্যারামিটারটি সঠিক অবস্থানে রয়েছে, তবে পতাকাগুলির প্রয়োজন নেই * ** কেবল ব্যবহার করুন (এই ক্ষেত্রে):

var option = process.argv[4]; //set to '123'

কিন্তু: বিকল্পটি সেট নাও হতে পারে, বা অন্য কোনও অবস্থানে থাকতে পারে বলে আমি মনে করি যে আরও ভাল ধারণাটি এমন হতে পারে:

var option, i = process.argv.indexOf("--option");
if(i>-1) {
    option = process.argv[i+1];
}

এইভাবে, আপনি একাধিক বিকল্পের বিভিন্নতা হ্যান্ডেল করতে পারেন, যেমন:

//task should still find 'option' variable in all cases
gulp mytask --newoption somestuff --option 123
gulp mytask --option 123 --newoption somestuff
gulp mytask --flag --option 123

** সম্পাদনা করুন: নোড স্ক্রিপ্টগুলির জন্য সত্য, তবে গল্প একটি শীর্ষস্থানীয় "-" ব্যতীত অন্য কোনও কাজের নাম হিসাবে ব্যাখ্যা করে। সুতরাং ব্যবহার gulp mytask 123ব্যর্থ হবে কারণ গাল্প '123' নামক কোনও কাজ খুঁজে পাবে না।


1
"Var বিকল্প, i = প্রক্রিয়া, argv.indexOf (" - বিকল্প ");" এ একটি টাইপ রয়েছে। আমি বিশ্বাস করি এটি প্রসেস.আরজিভি হওয়া উচিত।
লুইস পাওলো লোহমান

আহ, তাই করা উচিত। সংশোধন। ধন্যবাদ @ লুইস
ট্র্যাভেডেক

আমি কেবল - দেবদেব পতাকাটি যাচাই করতে চেয়েছিলাম, যাতে আমি উত্পাদন এবং নিম্ন পরিবেশের মধ্যে পার্থক্য করতে পারি। এটি অতিরিক্ত নির্ভরতা যুক্ত না করে কৌশলটি করে। ধন্যবাদ!
b01

1
আমার জন্য, gulp myTask --productionফলাফলগুলি process.argvসমান[pathToNode, pathToGulp, 'myTask', '--production']
সান চো

2
এটি সম্ভবত পরিবর্তিত হয়েছে, আমি একই পার্থক্য সহ কিছু পুরানো উদাহরণ দেখেছি। যাইহোক, আপনি কেবল এটি ডিবাগ করতে পারেন এবং আপনার ক্ষেত্রে এটি দেখতে পারেন। এটির শূন্য নির্ভরতা হওয়ায় এটি অবশ্যই গ্রহণযোগ্য উত্তর হওয়া উচিত ..
হুয়ান

19

দুলতে একটি প্যারামিটার পাস করার অর্থ কয়েকটি জিনিস হতে পারে:

  • কমান্ড লাইন থেকে গুল্পফাইলে (ইতিমধ্যে এখানে উদাহরণ দেওয়া হয়েছে)
  • Gulpfile.js স্ক্রিপ্টের মূল শরীর থেকে শুরু করে গুল্পের কাজগুলি।
  • একটি গুল্প টাস্ক থেকে অন্য গুল্প টাস্ক।

মূল গলফিল থেকে একটি গল্প টাস্কে প্যারামিটারগুলি পাশ করার একটি পদ্ধতির এখানে। প্যারামিটারের প্রয়োজনীয় কার্যটি নিজের মডিউলে নিয়ে যাওয়া এবং কোনও ফাংশনে এটি মোড়ানো (যাতে কোনও প্যারামিটার পাস হতে পারে) ::

// ./gulp-tasks/my-neat-task.js file
module.exports = function(opts){

  opts.gulp.task('my-neat-task', function(){
      console.log( 'the value is ' + opts.value );
  });

};
//main gulpfile.js file

//...do some work to figure out a value called val...
var val = 'some value';

//pass that value as a parameter to the 'my-neat-task' gulp task
require('./gulp-tasks/my-neat-task.js')({ gulp: gulp, value: val});

আপনার যদি প্রচুর ঝাল কাজ করে এবং কিছু কার্যকর পরিবেশগত কনফিগারেশন তাদের কাছে করতে চান তবে এটি কার্যকর হতে পারে। আমি নিশ্চিত না যে এটি একটি কার্য এবং অন্য কাজের মধ্যে কাজ করতে পারে।


16

মিনিমিস্ট ব্যবহার করে এটির জন্য একটি অফিসিয়াল গাল্প রেসিপি রয়েছে

https://github.com/gulpjs/gulp/blob/master/docs/recipes/pass-arguments-from-cli.md

মৌলিকগুলি ক্লিমে আর্গুমেন্টগুলি পৃথক করতে এবং পরিচিত বিকল্পগুলির সাথে তাদের একত্রিত করতে মিনিমাস্ট ব্যবহার করছে:

var options = minimist(process.argv.slice(2), knownOptions);

যা কিছু মতামত আছে

$ gulp scripts --env development

রেসিপি আরও সম্পূর্ণ তথ্য।


1
তালিকার শীর্ষে থাকা আবর্জনা এবং নীচে সঠিক সমাধানটি কেন উতরে উঠছে না? দীর্ঘশ্বাস
ডিডিডি

14

আপনি যদি পরিবেশের প্যারাম এবং অন্যান্য ব্যবহারের পাশাপাশি লগ ব্যবহার করতে চান তবে আপনি গল্প- ব্যবহার করতে পারেন

/* 
  $npm install gulp-util --save-dev
  $gulp --varName 123
*/
var util = require('gulp-util');
util.log(util.env.varName);

হালনাগাদ

gulp-use এখন অবচয় করা হয়েছে। পরিবর্তে আপনি মিনিমিস্ট ব্যবহার করতে পারেন ।

var argv = require('minimist')(process.argv.slice(2));
console.dir(argv);

1
gulp

5

@ ইথানের উত্তর পুরোপুরি কার্যকর হবে। আমার অভিজ্ঞতা থেকে, আরও নোডের উপায় হল পরিবেশের ভেরিয়েবলগুলি ব্যবহার করা। হোস্টিং প্ল্যাটফর্মগুলিতে স্থাপন করা প্রোগ্রামগুলি কনফিগার করার একটি আদর্শ উপায় (উদাঃ হেরোকু বা ডক্কু)।

কমান্ড লাইন থেকে প্যারামিটারটি পাস করার জন্য এটি এটি করুন:

উন্নয়ন: gulp dev

উৎপাদন NODE_ENV=production gulp dev

বাক্য গঠনটি ভিন্ন, তবে খুব ইউনিক্স এবং এটি হেরোকু, ডক্কু ইত্যাদির সাথে সামঞ্জস্যপূর্ণ

আপনি আপনার কোডটিতে চলকটি অ্যাক্সেস করতে পারেন process.env.NODE_ENV

MYAPP=something_else gulp dev

সেট করা হবে

process.env.MYAPP === 'something_else'

এই উত্তর আপনাকে অন্য কিছু ধারণা দিতে পারে।


4

আমি কীভাবে এটি ব্যবহার করব তা আমার নমুনা এখানে। সিএসএস / কম কাজের জন্য। সবার জন্য আবেদন করা যায়।

var cssTask = function (options) {
  var minifyCSS = require('gulp-minify-css'),
    less = require('gulp-less'),
    src = cssDependencies;

  src.push(codePath + '**/*.less');

  var run = function () {
    var start = Date.now();

    console.log('Start building CSS/LESS bundle');

    gulp.src(src)
      .pipe(gulpif(options.devBuild, plumber({
        errorHandler: onError
      })))
      .pipe(concat('main.css'))
      .pipe(less())
      .pipe(gulpif(options.minify, minifyCSS()))
      .pipe(gulp.dest(buildPath + 'css'))
      .pipe(gulpif(options.devBuild, browserSync.reload({stream:true})))
      .pipe(notify(function () {
        console.log('END CSS/LESS built in ' + (Date.now() - start) + 'ms');
      }));
  };

  run();

  if (options.watch) {
    gulp.watch(src, run);
  }
};

gulp.task('dev', function () {
  var options = {
    devBuild: true,
    minify: false,
    watch: false
  };

  cssTask (options);
});

3

অতিরিক্ত মডিউল ছাড়াই এখানে অন্য উপায়:

আমার কাছে টাস্ক নামটি থেকে পরিবেশটি অনুমান করা দরকার, আমার একটি 'দেব' টাস্ক এবং একটি 'প্রোড' টাস্ক রয়েছে।

আমি যখন রান gulp prodকরি তখন তা পরিবেশ পরিবেশে সেট করা উচিত। আমি যখন চালনা করি gulp devবা অন্য কোনও কিছু যখন এটি পরিবেশ পরিবেশে সেট করা উচিত।

তার জন্য আমি কেবল চলমান কার্যের নামটি যাচাই করেছি:

devEnv = process.argv[process.argv.length-1] !== 'prod';

2

আপনি যদি ইয়ার্জযুক্ত গুল্প ব্যবহার করেন তবে নিম্নলিখিতটি লক্ষ্য করুন:

আপনার যদি কোনও কার্য 'গ্রাহক' থাকে এবং প্রয়োজনীয় কমান্ডগুলির জন্য প্যারামিটার চেক করতে ইয়ার্গস বিল্ডটি ব্যবহার করতে না চান:

.command("customer <place> [language]","Create a customer directory") এটি দিয়ে কল করুন:

gulp customer --customer Bob --place Chicago --language english

yargs সবসময় একটি ত্রুটি নিক্ষেপ করবে, কল আছে যে যথেষ্ট কমান্ড নির্ধারিত ছিল না, এমনকি যদি আপনি !! -

এটি চেষ্টা করে দেখুন এবং কমান্ডটিতে কেবল একটি সংখ্যা যুক্ত করুন (এটি জাল্প-টাস্ক নামের সাথে সমান নয়) ... এবং এটি কাজ করবে:

.command("customer1 <place> [language]","Create a customer directory")

ইয়ার্জগুলি প্রয়োজনীয় প্যারামিটারটি পরীক্ষা করতে সক্ষম হওয়ার আগেই এটি ঝাঁকুনির ফলে কাজটি ট্রিগার করে বলে মনে হয়। এটি নির্ণয় করতে আমার জন্য সার্ভেয়ার সময় ব্যয় হয়েছিল।

আশা করি এটি আপনাকে সহায়তা করবে ..


0

আমি জানি আমি এই প্রশ্নের উত্তর দিতে দেরি করেছি তবে আমি @ ইথানের উত্তরের জন্য সর্বাধিক ভোটপ্রাপ্ত এবং গৃহীত উত্তরটি যুক্ত করতে চাই।

আমরা yargsকমান্ড লাইন প্যারামিটার পেতে ব্যবহার করতে পারি এবং এর সাথে আমরা অনুসরণের মতো কিছু পরামিতিগুলির জন্য আমাদের নিজস্ব উপন্যাসও যুক্ত করতে পারি।

var args = require('yargs')
    .alias('r', 'release')
    .alias('d', 'develop')
    .default('release', false)
    .argv;

দয়া করে আরও তথ্যের জন্য এই লিঙ্কটি উল্লেখ করুন। https://github.com/yargs/yargs/blob/HEAD/docs/api.md

নিম্নলিখিতের ডকুমেন্টেশনে দেওয়া অনুসারে উপনামের ব্যবহার রয়েছে yargs। আমরা yargsসেখানে আরও কার্যকারিতা খুঁজে পেতে পারি এবং কমান্ড লাইনটি পাস করার অভিজ্ঞতাটিকে আরও উন্নত করতে পারি।

.ালিয়াস (কী, ওরফে)

মূল নামগুলিকে সমতুল্য হিসাবে সেট করুন যা কোনও কীতে আপডেটগুলি উপাধিতে এবং তদ্বিপরীতগুলিতে প্রচার করে।

Aliচ্ছিকভাবে .alias () এমন একটি অবজেক্ট নিতে পারে যা কী কী কারণে উপকরণের জন্য কী ম্যাপ করে। এই বস্তুর প্রতিটি কী বিকল্পের মূল সংস্করণ হওয়া উচিত এবং প্রতিটি মান একটি স্ট্রিং বা স্ট্রিংগুলির একটি অ্যারে হওয়া উচিত।


-2

প্রক্রিয়াতে কেবল এটি একটি নতুন অবজেক্টে লোড করুন .. process.gulp = {}এবং সেখানে টাস্কটি দেখতে পাবেন।

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