সাধারণত আমরা কনসোল থেকে ঝাঁকুনি টাস্কের মতো কিছু চালাতে পারি gulp mytask
। আমি কি টাস্ক টাস্ক থেকে প্যারামিটারে যেতে পারি তা কি এখনও আছে? যদি সম্ভব হয় তবে দয়া করে এটি কীভাবে করা যায় তা উদাহরণ দিন।
সাধারণত আমরা কনসোল থেকে ঝাঁকুনি টাস্কের মতো কিছু চালাতে পারি gulp mytask
। আমি কি টাস্ক টাস্ক থেকে প্যারামিটারে যেতে পারি তা কি এখনও আছে? যদি সম্ভব হয় তবে দয়া করে এটি কীভাবে করা যায় তা উদাহরণ দিন।
উত্তর:
এটি একটি বৈশিষ্ট্য প্রোগ্রাম ছাড়া থাকতে পারে না। আপনি ইয়ার্জ চেষ্টা করতে পারেন ।
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
আশা করি আপনি এখান থেকে নিতে পারেন।
আরও একটি প্লাগইন রয়েছে যা আপনি ব্যবহার করতে পারেন, মিনিমিস্ট। এখানে আরও একটি পোস্ট রয়েছে যেখানে ইয়ার্জ এবং মিনিমিস্ট উভয়ের পক্ষে ভাল উদাহরণ রয়েছে: (গুলপকে এটি আলাদাভাবে কাজ চালানোর জন্য কোনও পতাকা দেওয়া সম্ভব? )
(argv.production === undefined) ? false : true;
সমতূল্য argv.production !== undefined
।
আপনি যদি অতিরিক্ত নির্ভরতা যুক্ত করা এড়াতে চান তবে আমি নোডকে 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' নামক কোনও কাজ খুঁজে পাবে না।
gulp myTask --production
ফলাফলগুলি process.argv
সমান[pathToNode, pathToGulp, 'myTask', '--production']
দুলতে একটি প্যারামিটার পাস করার অর্থ কয়েকটি জিনিস হতে পারে:
মূল গলফিল থেকে একটি গল্প টাস্কে প্যারামিটারগুলি পাশ করার একটি পদ্ধতির এখানে। প্যারামিটারের প্রয়োজনীয় কার্যটি নিজের মডিউলে নিয়ে যাওয়া এবং কোনও ফাংশনে এটি মোড়ানো (যাতে কোনও প্যারামিটার পাস হতে পারে) ::
// ./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});
আপনার যদি প্রচুর ঝাল কাজ করে এবং কিছু কার্যকর পরিবেশগত কনফিগারেশন তাদের কাছে করতে চান তবে এটি কার্যকর হতে পারে। আমি নিশ্চিত না যে এটি একটি কার্য এবং অন্য কাজের মধ্যে কাজ করতে পারে।
মিনিমিস্ট ব্যবহার করে এটির জন্য একটি অফিসিয়াল গাল্প রেসিপি রয়েছে ।
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
রেসিপি আরও সম্পূর্ণ তথ্য।
আপনি যদি পরিবেশের প্যারাম এবং অন্যান্য ব্যবহারের পাশাপাশি লগ ব্যবহার করতে চান তবে আপনি গল্প- ব্যবহার করতে পারেন
/*
$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);
@ ইথানের উত্তর পুরোপুরি কার্যকর হবে। আমার অভিজ্ঞতা থেকে, আরও নোডের উপায় হল পরিবেশের ভেরিয়েবলগুলি ব্যবহার করা। হোস্টিং প্ল্যাটফর্মগুলিতে স্থাপন করা প্রোগ্রামগুলি কনফিগার করার একটি আদর্শ উপায় (উদাঃ হেরোকু বা ডক্কু)।
কমান্ড লাইন থেকে প্যারামিটারটি পাস করার জন্য এটি এটি করুন:
উন্নয়ন:
gulp dev
উৎপাদন
NODE_ENV=production gulp dev
বাক্য গঠনটি ভিন্ন, তবে খুব ইউনিক্স এবং এটি হেরোকু, ডক্কু ইত্যাদির সাথে সামঞ্জস্যপূর্ণ
আপনি আপনার কোডটিতে চলকটি অ্যাক্সেস করতে পারেন process.env.NODE_ENV
MYAPP=something_else gulp dev
সেট করা হবে
process.env.MYAPP === 'something_else'
এই উত্তর আপনাকে অন্য কিছু ধারণা দিতে পারে।
আমি কীভাবে এটি ব্যবহার করব তা আমার নমুনা এখানে। সিএসএস / কম কাজের জন্য। সবার জন্য আবেদন করা যায়।
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);
});
অতিরিক্ত মডিউল ছাড়াই এখানে অন্য উপায়:
আমার কাছে টাস্ক নামটি থেকে পরিবেশটি অনুমান করা দরকার, আমার একটি 'দেব' টাস্ক এবং একটি 'প্রোড' টাস্ক রয়েছে।
আমি যখন রান gulp prod
করি তখন তা পরিবেশ পরিবেশে সেট করা উচিত। আমি যখন চালনা করি gulp dev
বা অন্য কোনও কিছু যখন এটি পরিবেশ পরিবেশে সেট করা উচিত।
তার জন্য আমি কেবল চলমান কার্যের নামটি যাচাই করেছি:
devEnv = process.argv[process.argv.length-1] !== 'prod';
আপনি যদি ইয়ার্জযুক্ত গুল্প ব্যবহার করেন তবে নিম্নলিখিতটি লক্ষ্য করুন:
আপনার যদি কোনও কার্য 'গ্রাহক' থাকে এবং প্রয়োজনীয় কমান্ডগুলির জন্য প্যারামিটার চেক করতে ইয়ার্গস বিল্ডটি ব্যবহার করতে না চান:
.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")
ইয়ার্জগুলি প্রয়োজনীয় প্যারামিটারটি পরীক্ষা করতে সক্ষম হওয়ার আগেই এটি ঝাঁকুনির ফলে কাজটি ট্রিগার করে বলে মনে হয়। এটি নির্ণয় করতে আমার জন্য সার্ভেয়ার সময় ব্যয় হয়েছিল।
আশা করি এটি আপনাকে সহায়তা করবে ..
আমি জানি আমি এই প্রশ্নের উত্তর দিতে দেরি করেছি তবে আমি @ ইথানের উত্তরের জন্য সর্বাধিক ভোটপ্রাপ্ত এবং গৃহীত উত্তরটি যুক্ত করতে চাই।
আমরা 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 () এমন একটি অবজেক্ট নিতে পারে যা কী কী কারণে উপকরণের জন্য কী ম্যাপ করে। এই বস্তুর প্রতিটি কী বিকল্পের মূল সংস্করণ হওয়া উচিত এবং প্রতিটি মান একটি স্ট্রিং বা স্ট্রিংগুলির একটি অ্যারে হওয়া উচিত।
প্রক্রিয়াতে কেবল এটি একটি নতুন অবজেক্টে লোড করুন .. process.gulp = {}
এবং সেখানে টাস্কটি দেখতে পাবেন।