Lấy tên tệp hiện tại trong gulp.src ()


138

Trong tệp gulp.js của tôi, tôi truyền tất cả các tệp HTML từ examplesthư mục vào buildthư mục.

Để tạo ra nhiệm vụ gulp không khó:

var gulp = require('gulp');

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

Nhưng tôi không thể tìm ra cách lấy tên tệp được tìm thấy (và được xử lý) trong tác vụ hoặc tôi không thể tìm thấy plugin phù hợp.


Nếu bạn đã giải quyết vấn đề của mình, bạn nên đăng câu trả lời của mình bên dưới. Bạn không nên đơn giản chỉnh sửa câu hỏi của bạn với giải pháp.
Andrew Marshall

2
@AndrewMarshall ... như nhận xét của tôi về chỉnh sửa, mà bạn đã xóa, giải thích, tôi không muốn tuyên bố đã tìm thấy câu trả lời chính xác nhưng muốn đưa ra các khoản tín dụng cho câu trả lời xứng đáng. Đó là lý do tại sao tôi không đăng bài sửa đổi nhỏ như một câu trả lời. Nếu bạn nghĩ rằng việc xóa chỉnh sửa của tôi là tốt hơn cho người dùng (hoặc chỉ tuân thủ các quy tắc của trang web này), thì tôi đồng ý với điều đó. Đối với bất kỳ ai khác, chỉ cần nhấp vào lịch sử chỉnh sửa để xem những gì đã có trước đó.
dkastl

Câu trả lời:


174

Tôi không chắc bạn muốn sử dụng tên tệp như thế nào, nhưng một trong số này sẽ giúp:

  • Nếu bạn chỉ muốn xem tên, bạn có thể sử dụng một cái gì đó như gulp-debug, liệt kê chi tiết của tệp vinyl. Chèn cái này vào bất cứ đâu bạn muốn có một danh sách, như vậy:

    var gulp = require('gulp'),
        debug = require('gulp-debug');
    
    gulp.task('examples', function() {
        return gulp.src('./examples/*.html')
            .pipe(debug())
            .pipe(gulp.dest('./build'));
    });
  • Một tùy chọn khác là gulp-filelog, tôi chưa sử dụng, nhưng âm thanh tương tự (nó có thể sạch hơn một chút).

  • Một tùy chọn khác là gulp-filesize, xuất ra cả tệp và kích thước của nó.

  • Nếu bạn muốn kiểm soát nhiều hơn, bạn có thể sử dụng một cái gì đó như gulp-tap, cho phép bạn cung cấp chức năng của riêng bạn và xem các tệp trong đường ống.


7
Cảm ơn bạn! Các plugin "log" không phải là thứ tôi đang tìm, bởi vì nó chỉ ghi vào nhật ký giao diện điều khiển. Nhưng gulp-tapcho phép lấy đường dẫn cho mỗi tệp, vì vậy tôi có thể sử dụng nó để cập nhật danh sách của mình trong một tệp HTML khác.
dkastl

Nếu tôi muốn lưu trữ tất cả các tệp src trong một mảng thì sao? gỡ lỗi không cung cấp nhiều tùy chọn.
Abhinav Singi

22

Tôi tìm thấy plugin này để làm những gì tôi mong đợi: sử dụng gulp

Ví dụ sử dụng đơn giản: Tìm kiếm tất cả các tệp trong dự án với phần mở rộng .jsx

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

Đầu ra:

[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

sử dụng gulp đã làm những gì tôi đang tìm kiếm cảm ơn rất nhiều.
sghosh968

10

Đây là một cách đơn giản khác.

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
Bạn biết đấy, hầu hết mọi người không biết về cà phê, vì vậy sẽ có ích hơn nhiều nếu chỉ viết câu trả lời theo cách cơ bản nhất cho số lượng độc giả tối đa sẽ có lợi :)
vsync

Đối với tôi es.mapném một lỗi:SyntaxError: Unexpected token .
vsync

1
+1 cho giải pháp này (không có plugin). Nhưng có một lỗi, thay vào return cb(); đó nên có cb(null, file);. Nếu không, các tệp sẽ được lọc ra và sẽ không đi sâu hơn vào chuỗi ống. Thêm thông tin kiểm tra tài liệu cho es.map ()
Dimitry K

5

Bạn có thể sử dụng mô-đun gulp-filenames để lấy mảng đường dẫn. Bạn thậm chí có thể nhóm chúng theo không gian tên:

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

Đối với trường hợp của tôi gulp-bỏ qua là hoàn hảo. Như tùy chọn, bạn có thể vượt qua một chức năng ở đó:

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

Và nhiệm vụ sẽ như thế này:

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

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

0

Nếu bạn muốn sử dụng câu trả lời @OverZealous '( https://stackoverflow.com/a/21806974/1019307 ) trong Bản mô tả, bạn cần importthay vì require:

import * as debug from 'gulp-debug';

...

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

(Tôi cũng đã thêm a title).


Tại sao importthay vì require?
vsync

Vâng tôi không biết. Đó là trong những ngày đầu phát triển JS và trong suy tư, tôi nên điều tra thêm về lý do tại sao điều đó làm việc cho tôi. Nhưng nó đã làm và do đó tại sao tôi đưa nó lên!
HankCa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.