Tùy chọn "mở rộng" làm gì trong grunt-Contrib-copy? Tất cả các ví dụ đều sử dụng nó nhưng tài liệu không nói gì về những gì nó làm


100
  1. Đây là README và các ví dụ: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md .
  2. Đây là phần có liên quan của mã (mà tôi dường như không thể hiểu được) từ https://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js :
module.exports = function (grunt) {
  'Sử dụng nghiêm ngặt';

  var path = request ('path');

  grunt.registerMultiTask ('copy', 'Copy files.', function () {
    var kindOf = grunt.util.kindOf;

    var options = this.options ({
      processContent: false,
      processContentExclude: []
    });

    var copyOptions = {
      process: options.processContent,
      noProcess: options.processContentExclude
    }

    grunt.verbose.writeflags (tùy chọn, 'Tùy chọn');

    var đích;
    var isExpandedPair;
    var tally = {
      dirs: 0,
      tệp: 0
    }

    this.files.forEach (function (filePair) {
      isExpandedPair = filePair.orig.expand || sai;

      filePair.src.forEach (function (src) {
        if (DetDestType (filePair.dest) === 'thư mục') {
          dest = (isExpandedPair)? filePair.dest: unixifyPath (path.join (filePair.dest, src));
        } khác {
          dest = filePair.dest;
        }

        if (grunt.file.isDir (src)) {
          grunt.verbose.writeln ('Đang tạo' + dest.cyan);
          grunt.file.mkdir (dest);
          tally.dirs ++;
        } khác {
          grunt.verbose.writeln ('Đang sao chép' + src.cyan + '->' + dest.cyan);
          grunt.file.copy (src, dest, copyOptions);
          tally.files ++;
        }
      });
    });

Bạn có biết rằng câu trả lời được chấp nhận là không chính xác? Xem câu trả lời này bên dưới .
David Pärsson

Câu trả lời:


59

Mở rộng cho phép bạn chỉ định xem bạn muốn tạo đường dẫn đích đầy đủ (ví dụ /path/missing1/missing2:) hay chỉ tạo thư mục cuối cùng khi thư mục gốc của nó tồn tại ( /path/existing/missing).


4
Ah, vì vậy nó thực sự là tùy chọn -p để mkdir. Hiểu rồi, cảm ơn!
Patrick

6
Câu trả lời này không đúng. Nó được đơn giản hóa tốt nhất.
David Pärsson

3
-1. Điều này gây hiểu lầm - dựa trên câu trả lời này mà tôi đã xóa expand: true, tôi nghĩ rằng tôi không cần nó, và sau đó bản dựng của tôi ngừng hoạt động.
Claudiu

82

expandlà một phần của Grunt và không dành riêng cho grunt-Contrib-copy, thông tin về nó có thể được tìm thấy trong API cấu hình tệp của Grunt :

Đặt expandđể truebật các tùy chọn sau:

  • cwdTất cả các srckết quả phù hợp đều liên quan đến (nhưng không bao gồm) đường dẫn này.
  • src(Các) mẫu để so khớp, liên quan đến cwd.
  • dest Tiền tố đường dẫn đích.
  • extThay thế bất kỳ tiện ích mở rộng hiện có nào bằng giá trị này trong destcác đường dẫn đã tạo .
  • extDotĐược sử dụng để chỉ ra vị trí của dấu chấm cho phần mở rộng Có thể lấy một trong hai 'first'(phần mở rộng bắt đầu sau dấu chấm đầu tiên trong tên tệp) hoặc 'last'(phần mở rộng bắt đầu sau dấu chấm cuối cùng) và được đặt theo mặc định thành 'first'.
  • flattenXóa tất cả các phần của đường dẫn khỏi destcác đường dẫn đã tạo .
  • renameHàm này được gọi cho mỗi srctệp phù hợp , (sau khi đổi tên phần mở rộng và làm phẳng). Đường dẫn destsrcđường dẫn phù hợp được chuyển vào và hàm này phải trả về một destgiá trị mới . Nếu cùng một destđược trả về nhiều lần, mỗi srccái đã sử dụng nó sẽ được thêm vào một mảng nguồn cho nó.

Ngoài ra, nó có vẻ như destsẽ luôn được coi là một thư mục đích nếu đặt expandthành true.


Câu trả lời hay hơn. Nhưng điều này không được ghi lại ở đâu?
syonip

Tôi thực sự đã tìm thấy tài liệu sau khi xem lại lần thứ hai và tôi đã cập nhật câu trả lời của mình cho phù hợp.
David Pärsson

Tôi đã thêm ví dụ hữu ích được cung cấp trong tài liệu. Nó rõ ràng hơn bây giờ.
Rémi Becheras
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.