Gulp.src में वर्तमान फ़ाइल नाम प्राप्त करें ()


138

मेरे gulp.js फ़ाइल में मैं examplesफ़ोल्डर से फ़ोल्डर में सभी HTML फ़ाइलों को स्ट्रीमिंग कर रहा हूं build

गल्प टास्क बनाना मुश्किल नहीं है:

var gulp = require('gulp');

gulp.task('examples', function() {
    return gulp.src('./examples/*.html')
        .pipe(gulp.dest('./build'));
});

लेकिन मैं यह पता नहीं लगा सकता कि कार्य में (और संसाधित) पाए गए फ़ाइल नामों को कैसे पुनः प्राप्त करें, या मुझे सही प्लगइन नहीं मिल सकता है।


यदि आपने अपनी समस्या हल कर ली है, तो आपको अपना उत्तर नीचे पोस्ट करना चाहिए। आपको केवल अपने प्रश्न को हल के साथ संपादित नहीं करना चाहिए ।
एंड्रयू मार्शल

2
@AndrewMarshall ... संपादित करने के लिए मेरी टिप्पणी के रूप में, जिसे आपने हटा दिया है, बताते हैं, मैं सही उत्तर पाने के लिए दावा नहीं करना चाहता, लेकिन उस उत्तर का श्रेय देना चाहता हूं जो इसके योग्य है। इसलिए मैंने उत्तर के रूप में छोटे संशोधन को पोस्ट नहीं किया। अगर आपको लगता है, कि मेरा संपादन हटाना उपयोगकर्ताओं के लिए बेहतर है (या बस इस साइट के नियमों का अनुपालन करता है), तो मैं इसके साथ ठीक हूं। किसी और के लिए, संपादन इतिहास पर क्लिक करके देखें कि पहले क्या था।
dkastl

जवाबों:


174

मुझे यकीन नहीं है कि आप फ़ाइल नामों का उपयोग कैसे करना चाहते हैं, लेकिन इनमें से एक को मदद करनी चाहिए:

  • यदि आप केवल नाम देखना चाहते हैं, तो आप कुछ का उपयोग कर सकते हैं gulp-debug, जो विनाइल फ़ाइल के विवरण को सूचीबद्ध करता है। आप कहीं भी एक सूची चाहते हैं, इसे सम्मिलित करें:

    var gulp = require('gulp'),
        debug = require('gulp-debug');
    
    gulp.task('examples', function() {
        return gulp.src('./examples/*.html')
            .pipe(debug())
            .pipe(gulp.dest('./build'));
    });
  • एक अन्य विकल्प है gulp-filelog, जिसका मैंने उपयोग नहीं किया है, लेकिन यह समान लगता है (यह थोड़ा क्लीनर हो सकता है)।

  • एक अन्य विकल्प है gulp-filesize, जो फ़ाइल को आउटपुट करता है और इसका आकार है।

  • यदि आप अधिक नियंत्रण चाहते हैं, तो आप कुछ का उपयोग कर सकते हैं gulp-tap, जो आपको अपना फ़ंक्शन प्रदान करने और पाइप में फ़ाइलों को देखने की सुविधा देता है।


7
धन्यवाद! "लॉग" प्लगइन्स जहां मैं क्या देख रहा था, क्योंकि यह केवल कंसोल लॉग को लिखता है। लेकिन gulp-tapप्रत्येक फ़ाइल के लिए पथ प्राप्त करने की अनुमति देता है, इसलिए मैं अपनी सूची को किसी अन्य HTML फ़ाइल में अपडेट करने के लिए उपयोग कर सकता हूं।
dkastl

अगर मैं किसी सरणी में सभी src फ़ाइलों को संग्रहीत करना चाहता हूं तो क्या होगा? डीबग कई विकल्प नहीं देता है।
अभिनव सिंगी

22

मैंने इस प्लगइन को वही कर पाया जो मैं उम्मीद कर रहा था: gulp- उपयोग करना

सरल उपयोग उदाहरण: .jsx एक्सटेंशन के साथ प्रोजेक्ट में सभी फ़ाइलों को खोजें

gulp.task('reactify', function(){
        gulp.src(['../**/*.jsx']) 
            .pipe(using({}));
        ....
    });

आउटपुट:

[gulp] Using gulpfile /app/build/gulpfile.js
[gulp] Starting 'reactify'...
[gulp] Finished 'reactify' after 2.92 ms
[gulp] Using file /app/staging/web/content/view/logon.jsx
[gulp] Using file /app/staging/web/content/view/components/rauth.jsx

gulp- का उपयोग करते हुए मैं बहुत धन्यवाद के लिए देख रहा था।
sghosh968

10

यहाँ एक और सरल तरीका है।

var es, log, logFile;

es = require('event-stream');

log = require('gulp-util').log;

logFile = function(es) {
  return es.map(function(file, cb) {
    log(file.path);
    return cb();
  });
};

gulp.task("do", function() {
 return gulp.src('./examples/*.html')
   .pipe(logFile(es))
   .pipe(gulp.dest('./build'));
});

5
आप जानते हैं, अधिकांश लोग कॉफ़ीस्क्रिप्ट नहीं जानते हैं, इसलिए यह अधिक लाभकारी होगा कि केवल सबसे बुनियादी तरीके से उत्तर लिखने के लिए पाठकों की अधिकतम संख्या को फायदा होगा :)
vsync

मेरे लिए es.mapएक त्रुटि है:SyntaxError: Unexpected token .
vsync

1
इस समाधान के लिए +1 (प्लगिन के बिना)। लेकिन एक बग है, इसके बजाय return cb(); यह होना चाहिए cb(null, file);। अन्यथा फाइलें छन कर बाहर आ जाएंगी और पाइप श्रृंखला से नीचे नहीं जाएगी। Es.map () के लिए
दिमित्री के

5

आप पथों की सरणी प्राप्त करने के लिए gulp-filenames मॉड्यूल का उपयोग कर सकते हैं । तुम भी उन्हें नामस्थान द्वारा समूह कर सकते हैं:

var filenames = require("gulp-filenames");

gulp.src("./src/*.coffee")
    .pipe(filenames("coffeescript"))
    .pipe(gulp.dest("./dist"));

gulp.src("./src/*.js")
  .pipe(filenames("javascript"))
  .pipe(gulp.dest("./dist"));

filenames.get("coffeescript") // ["a.coffee","b.coffee"]  
                              // Do Something With it 

3

मेरे मामले के लिए गुलाल-उपेक्षा एकदम सही थी। विकल्प के रूप में आप वहां एक समारोह पास कर सकते हैं:

function condition(file) {
 // do whatever with file.path
 // return boolean true if needed to exclude file 
}

और कार्य इस तरह दिखेगा:

var gulpIgnore = require('gulp-ignore');

gulp.task('task', function() {
  gulp.src('./**/*.js')
    .pipe(gulpIgnore.exclude(condition))
    .pipe(gulp.dest('./dist/'));
});

0

यदि आप टाइपस्क्रिप्ट में @OverZealous 'उत्तर ( https://stackoverflow.com/a/21806974/1019307 ) का उपयोग करना चाहते हैं , तो आपको importइसके बजाय इसकी आवश्यकता होगी require:

import * as debug from 'gulp-debug';

...

    return gulp.src('./examples/*.html')
        .pipe(debug({title: 'example src:'}))
        .pipe(gulp.dest('./build'));

(मैंने भी कहा title)


importइसके बजाय क्यों require?
vsync

हाँ, मुझे नहीं पता। जेएस विकास के मेरे शुरुआती दिनों में और प्रतिबिंब में मुझे इस बात की अधिक जांच करनी चाहिए थी कि मेरे लिए काम क्यों किया। लेकिन यह किया और इस तरह मैंने इसे ऊपर रखा!
हांकना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.