आम तौर पर हम कंसोल से gulp टास्क को कुछ इस तरह से चला सकते हैं gulp mytask
। क्या ऐसा भी है कि मैं पैरामीटर में गल कार्य को पारित कर सकता हूं? यदि संभव हो, तो कृपया उदाहरण दिखाएं कि यह कैसे किया जा सकता है।
आम तौर पर हम कंसोल से gulp टास्क को कुछ इस तरह से चला सकते हैं 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
विफल हो जाएगा क्योंकि gulp को '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
मूल बातें न्यूनतम तर्क का उपयोग कर रहे हैं ताकि cli तर्कों को अलग किया जा सके और उन्हें ज्ञात विकल्पों के साथ जोड़ा जा सके:
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- उपयोग अब पदावनत हो गया है। आप इसके बजाय मिनिमिस्ट का उपयोग कर सकते हैं ।
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
यारवे एक त्रुटि को फेंक देंगे, कि कॉल करने के लिए पर्याप्त आदेश नहीं दिए गए थे, भले ही आपके पास हो !! -
इसे आज़माएँ और कमांड में केवल एक अंक जोड़ें (इसे गोल-टास्क नाम के बराबर नहीं बनाने के लिए) ... ... और यह काम करेगा:
.command("customer1 <place> [language]","Create a customer directory")
यह कार्य को ट्रिगर करने के लिए गल्प का कारण बनता है, इससे पहले कि यार्ग इस आवश्यक पैरामीटर की जांच करने में सक्षम हो। यह पता लगाने के लिए मुझे surveral घंटे खर्च करने पड़ते हैं।
आशा है कि यह आपकी मदद करेगा ..
मुझे पता है कि मुझे इस प्रश्न का उत्तर देने में देर हो गई है, लेकिन मैं सबसे अधिक मतदान और स्वीकृत उत्तर @ ईथन के उत्तर में कुछ जोड़ना चाहूंगा।
हम 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
वहां अधिक फ़ंक्शन भी पा सकते हैं और कमांड लाइन पासिंग अनुभव को और बेहतर बना सकते हैं।
.लियास (कुंजी, उर्फ)
कुंजी नामों को समतुल्य सेट करें जैसे कि एक कुंजी का अद्यतन उपनाम और इसके विपरीत प्रचार करेगा।
वैकल्पिक रूप से .alias () एक ऐसा ऑब्जेक्ट ले सकता है जो उपनामों की कुंजी देता है। इस ऑब्जेक्ट की प्रत्येक कुंजी विकल्प का विहित संस्करण होना चाहिए, और प्रत्येक मान स्ट्रिंग या स्ट्रिंग का एक सरणी होना चाहिए।
बस इसे प्रक्रिया पर एक नई वस्तु में लोड करें .. process.gulp = {}
और कार्य को वहां देखें।