निर्देशिकाओं और उनकी फ़ाइलों को चुनने और स्थानांतरित करने के लिए gulp का उपयोग करें


98

मैं वर्तमान में bash स्क्रिप्ट को कॉल करने के लिए gulp का उपयोग कर रहा हूं जो मेरी dist/निर्देशिका को साफ़ करता है और उपयुक्त फ़ाइलों को स्वच्छ निर्देशिका में ले जाता है। मुझे यह पसंद है कि मैं गल्प के साथ किया जा सकता हूं क्योंकि मुझे यकीन नहीं है कि स्क्रिप्ट एक गैर * निक्स फाइल सिस्टम पर काम करेगी।
अब तक, मैं dist/निर्देशिका को साफ करने के लिए gulp-clean मॉड्यूल का उपयोग कर रहा हूं, लेकिन जब मैं आवश्यक निर्देशिकाओं और उनकी फ़ाइलों को डिस्टर्ब फ़ोल्डर में ले जाने का प्रयास करता हूं, तो निर्देशिकाएं खाली होती हैं।

var gulp = require('gulp'),
    clean = require('gulp-clean');

gulp.task('clean', function(){
  return gulp.src(['dist/*'], {read:false})
  .pipe(clean());
});

gulp.task('move',['clean'], function(){
  gulp.src(['_locales', 'icons', 'src/page_action', 'manifest.json'])
  .pipe(gulp.dest('dist'));
});

gulp.task('dist', ['move']);

निर्देशिका gulp distमें कॉलिंग परिणाम dist/सही निर्देशिकाओं के साथ आबादी वाले हैं, लेकिन वे सभी खाली हैं

$ ls dist/*
dist/manifest.json

dist/_locales:

dist/icons:

dist/page_action:

मैं dist/फ़ोल्डर में निर्देशिकाओं और उनकी सामग्री की प्रतिलिपि कैसे बनाऊं?

जवाबों:


162

आपको src के baseविकल्प को शामिल करना होगा, जो फ़ाइल संरचना को आपके इच्छित तरीके से संरक्षित करेगा:

var filesToMove = [
        './_locales/**/*.*',
        './icons/**/*.*',
        './src/page_action/**/*.*',
        './manifest.json'
    ];

gulp.task('move',['clean'], function(){
  // the base option sets the relative root for the set of files,
  // preserving the folder structure
  gulp.src(filesToMove, { base: './' })
  .pipe(gulp.dest('dist'));
});

इसके अलावा, यदि आप अपने प्रोजेक्ट की जड़ में इन सभी स्रोत फ़ाइलों को रखते हैं, तो संभवतः आपको सड़क के नीचे परेशानी होने वाली है।

यदि आप कर सकते हैं, तो मैं आपको एक एकल src/फ़ोल्डर का उपयोग करने की सलाह दूंगा और अपनी सभी एप्लिकेशन-विशिष्ट फ़ाइलों को वहां स्थानांतरित कर दूंगा। यह रखरखाव को आगे बढ़ने में आसान बनाता है, और आपकी बिल्ड-विशिष्ट फ़ाइलों को आपके एप्लिकेशन-विशिष्ट फ़ाइलों के साथ मिश्रित होने से रोकता है।

यदि आप ऐसा करते हैं, तो बस की सभी घटनाओं की जगह ./के साथ src/ऊपर के उदाहरण में।


1
फ़ाइलों को पुनर्गठित करने के बाद ही पूरी तरह से काम किया गया है लेकिन आपका तर्क सही है इसलिए मैं आपके उत्तर को सही मान रहा हूं। धन्यवाद।
मकेनोवा

2
विपरीत करने के लिए, गुल-चपटे का उपयोग करें। stackoverflow.com/questions/21153338/…
टोनी

2
किसी और के लिए एक नोट के रूप में जिसने ऐसा किया है, सुनिश्चित करें कि आपके पास readsrc सेट में विकल्प नहीं है false(यह trueडिफ़ॉल्ट रूप से सेट है )।
यंदोलोक

3
जब मैं ऐसा करता हूं, तो यह पूरी रूट डायरेक्टरी के साथ कॉपी होता है।
खानाबदोश

5

मूल प्रश्न इसके केवल निर्देशिका (उर्फ फ़ोल्डर्स) को लक्षित करता है gulp.src, अर्थात gulp.src(['_locales', ...इस उदाहरण में, _localesएक निर्देशिका का नाम है ।

स्वीकृत उत्तर उन निर्देशिकाओं में कहीं भी फाइलों को लक्षित करने के लिए अपने में एक globपैटर्न का उपयोग करता है , अर्थात , ( डबल-तारांकन नोटिस , और फ़ाइल नामकपड़ा)gulp.srcgulp.src(['./_locales/**/*.*', ... । तारांकन)। स्वीकृत उत्तर काम करता है ...

... लेकिन स्वीकृत उत्तर केवल baseविकल्प पर जोर देता है :

आपको src के baseविकल्प को शामिल करना होगा ...

मैंने प्रयोग किया और पाया:

  1. सच पूछिये तो, इसका इस्तेमाल करने के अनावश्यक है baseविकल्प प्राप्त करने के लिए क्या ओपी से पूछा: "... और उचित चाल फ़ाइलें स्वच्छ निर्देशिका के लिए।" baseविकल्प है वास्तव में बनाए रखने के फ़ोल्डर + फ़ाइल संरचना (स्वीकार किए जाते हैं जवाब में वर्णित है), लेकिन baseविकल्प है पर्याप्त नहीं फ़ाइलों को स्थानांतरित करने के रूप में ओपी पूछा । फ़ोल्डर + फ़ाइल संरचना को संरक्षित करना संभवतः ओपी को उम्मीद है , इसलिए स्वीकृत उत्तर अच्छा है, लेकिन ...

  2. बस फ़ाइलों को स्थानांतरित करने के लिए क्या दोहराना है , यह globपैटर्न है:

    1. डबल-तारांकन ( .../**/...) सभी सबफ़ोल्डर्स, और सबफ़ोल्डर्स 'सबफ़ोल्डर्स', आदि के दौरान पुनरावर्ती खोज करता है।

    2. Filename.extension तारांकन ( .../*.*) सभी नामों और सभी एक्सटेंशन की फ़ाइलों को ढूँढता है । इसलिए मुझे लगता है कि यह हिस्सा सबसे अधिक जोर देने के लायक है!

  3. स्वीकृत उत्तर कुछ और बदलता है; इसमें पास किए ./गए प्रत्येक पथ तर्क के लिए एक उपसर्ग जोड़ता है gulp.src। मुझे लगता है कि यह अनावश्यक / बेमानी है; यदि कोई नहीं है ./, (ओपी प्रश्न के रूप में), वर्तमान निर्देशिका के सापेक्ष पथ हल हो गए हैं - जिसके परिणामस्वरूप समान व्यवहार होता है । लेकिन शायद इसके साथ स्पष्ट होना अच्छा अभ्यास है./

मुझे पता है अगर मैं गलत हूँ ...

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.