मेरा प्रश्न एक दूसरे के साथ शुरू होता है, यहाँ से पूछा: Gulp: How to set dest folder relative to processed file (when using wildcards)?स्पष्टीकरण()
मैं एक ऐसी ही स्थिति है, जहां मैं एक प्रति मॉड्यूल आधार पर संकुचित संस्करण बनाने की जरूरत है। यही है, मैं
ui/test/one/script1.js
ui/test/two/script2.js
है और मैं तो मैं
ui/test/one/compressed/script1.js
ui/test/two/compressed/script2.js
साथ खत्म हो रहा घूंट कार्य निम्नलिखित है
gulp.task('test', function() {
return gulp.src('ui/test/**/*.js')
.pipe(gulp.dest(function(file) {
return path.join(path.dirname(file.path), 'compressed');
}));
});
हालांकि घूंट रिश्तेदार निर्देशिका में फ़ाइलों की प्रतिलिपि की आवश्यकता है , जब मैं इसे चलाता हूं, तो मैं
ui/test/one/compressed/one/script1.js
ui/test/two/compressed/two/script2.js
के साथ समाप्त होता है
मैं docs में देखते हैं, जहां यह कहते हैं
CWD - कार्यशील निर्देशिका फ़ोल्डर के सापेक्ष है निर्दिष्ट करें। आधार - cwd से संबंधित फ़ोल्डर निर्दिष्ट करें। डिफ़ॉल्ट वह जगह है जहां ग्लोब शुरू होता है। यह जब) .dest में बचत (
मैं कई प्रश्न हैं, विशेष रूप से के बारे में .src()
, .dest()
और पथ और फ़ाइल वस्तुओं फ़ाइल नाम निर्धारित करने के लिए प्रयोग किया जाता है। (यानी, मुझे यकीन है कि मेरा अंतिम लक्ष्य प्राप्त करने के अन्य तरीके हैं, यह प्रश्न विशेष रूप से ऊपर नमूना गल्प कोड के व्यवहार और उल्लेख किए गए कार्यों के व्यवहार के बारे में है, इसलिए मैं उनके व्यवहार और एपीआई को बेहतर ढंग से समझ सकता हूं।)
प्रश्न
- जब डॉक्स कहते हैं कि "कार्यशील निर्देशिका फ़ोल्डर के सापेक्ष है" इस, क्या फ़ोल्डर है?
- उसी नोट पर, this comment के संबंध में और दस्तावेज़ों में स्थान जहां यह कहता है "आधार - सीडब्ल्यूडी के सापेक्ष फ़ोल्डर निर्दिष्ट करें। डिफ़ॉल्ट वह जगह है जहां ग्लोब शुरू होता है" ग्लोब शुरू होता है "क्या मतलब है? 'ग्लोब' की मेरी समझ यह है कि यह पूरी स्ट्रिंग है, लेकिन क्या यह वास्तव में उस स्ट्रिंग के भीतर * चरित्र का मतलब है? तो
some/folder/a/b/c/foo.js
पर मौजूद फ़ाइल के साथ 'कुछ/फ़ोल्डर/**/*। जेएस' के लिए मुझे यकीन नहीं है कि आधारsome/folder/
,some/folder/a/
, याsome/folder/a/b/c/
है? <where the glob begins> + '..'
कहने का कोई तरीका है?- जहां मैं path.join (path.dirname (file.path), 'संपीड़ित' कह रहा हूं) मुझे लगता है कि
C:\blah\ui\test\one\compressed
का उत्पादन कर रहा है। यह तब चलता है कि जो भी तय किया गया है, फ़ाइल के वास्तविक नाम मेंone\script1.js
दिमाग में है। मैं अपने दिमाग को कैसे बदलूं ताकि यह केवलscript1.js
की सोच हो?
नोट:
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\one\script1.js
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\one\script1.js
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\two\script2.js
cwd: ./
base: C:\blah\ui\test
path: C:\blah\ui\test\two\script2.js
तो यह है कि प्रतीत होता है: मैं निम्नलिखित (का उपयोग करते हुए घूंट-डिबग)
gulp.task('test', function() {
return gulp.src('ui/test/**/*.js', {cwd: './'})
.pipe(debug({minimal: false}))
.pipe(rename(function(path) {
path.basename = path.basename.substring(path.basename.lastIndexOf('\\') + 1);
}))
.pipe(debug({minimal: false}))
.pipe(gulp.dest(function(file) {
return path.join(path.dirname(file.path), 'compressed');
}));
});
कंसोल कार्य के इस संस्करण के लिए निम्न उत्पादन किया गया है कर रही करने की कोशिश की नाम पर पथ पर कोई प्रभाव नहीं पड़ता है। मैंने पथ को संशोधित करने का भी प्रयास किया।नाम बदलें पाइप में dirname, लेकिन कुछ भी नहीं मिला जो अंतिम आउटपुट पथ से नकली निर्देशिका नाम को हटाने का वांछित प्रभाव होगा।
मेरा आखिरी सवाल, तो, वास्तव में पथ क्या है। बेसिनम और path.dirname नाम बदलने के लिए पास की गई वस्तु वस्तु के लिए है?
संपादित करें: मुझे this मिला है जो गल्प कार्यों को डीबग करने के तरीके पर है।
{
basename: "script1",
dirname: "one",
extname: ".js"
}
नाम बदलने परिणामों में ''
को path.dirname स्थापना
ui/test/compressed/script1.js
ui/test/compressed/script2.js
तो
: एक debugger;
बयान का नाम बदलें समारोह में रखा के साथ ऐसा करने से मुझे पथ वस्तु है, जो इस तरह दिखता का निरीक्षण करने की अनुमति दी यह हो सकता है कि नाम() खुद की आवश्यकता के लिए उपयोगी नहीं है। यह .src() के आधार विकल्प की तरह दिख रहा है, जहां कुंजी झूठ है, लेकिन दस्तावेज़ बदले में हैं।
ऐसा लगता है कि आपको पिछले '.pipe' में जिस तरीके से आवश्यकता है, उसे संशोधित करने का तरीका मिला है, तो सवाल क्या है? गैर-मानक परिदृश्य को बॉक्स से बाहर क्यों नहीं जाने देता है? –
@ किरीलस्लाटिन मैं 'ui/test/one/compressed/one/script1.js' के साथ समाप्त होता हूं जहां मुझे चाहिए' ui/test/one/compressed/script1.js'। वह दूसरा '/ एक' है जिसे मैं टालना चाहता हूं। मैंने इस नुस्खा को https://github.com/gulpjs/gulp/blob/master/docs/recipes/running-task-steps-per-folder.md संशोधित किया और मुझे जो चाहिए वह प्राप्त करने में सक्षम था, इसलिए यदि बक्षीस समाप्त हो जाता है और उत्तर देने के द्वारा कोई और दावा करने की परवाह नहीं करता है, फिर मैं इसके साथ समाप्त होने के साथ एक उत्तर पोस्ट करूंगा। मैं नाम में एक हैश का उपयोग कर समाप्त हुआ, जो कि मुझे बस चाहिए था। – jinglesthula
मुझे ध्यान रखना चाहिए कि मेरी पिछली टिप्पणी अंतिम परिणाम से संबंधित है, न कि .src() और .dest() के बारे में वास्तविक प्रश्नों के बारे में और कैसे हैंडल पथ जो मैं वास्तव में यहां पूछ रहा था। तो, मैं दूसरे प्रश्न पर जो पाया वह पोस्ट करूंगा कि यह वास्तव में जवाब है :) – jinglesthula