ตัวเลือก "ขยาย" ทำอะไรใน grunt-Contrib-copy? ตัวอย่างทั้งหมดใช้ แต่เอกสารไม่ได้บอกว่ามันทำอะไร


100
  1. นี่คือ README และตัวอย่าง: https://github.com/gruntjs/grunt-contrib-copy/blob/master/README.md
  2. นี่คือส่วนที่เกี่ยวข้องของโค้ด (ซึ่งดูเหมือนว่าฉันไม่เข้าใจ) จากhttps://github.com/gruntjs/grunt-contrib-copy/blob/master/tasks/copy.js :
module.exports = function (ฮึดฮัด) {
  'ใช้อย่างเข้มงวด';

  var path = ต้องใช้ ('path');

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

    var options = this.options ({
      processContent: เท็จ
      processContentExclude: []
    });

    var copyOptions = {
      กระบวนการ: options.processContent,
      noProcess: options.processContentExclude
    };

    grunt.verbose.writeflags (ตัวเลือก 'ตัวเลือก');

    var dest;
    var isExpandedPair;
    var tally = {
      dirs: 0,
      ไฟล์: 0
    };

    this.files.forEach (ฟังก์ชัน (filePair) {
      isExpandedPair = filePair.orig.expand || เท็จ;

      filePair.src.forEach (ฟังก์ชัน (src) {
        ถ้า (detectDestType (filePair.dest) === 'ไดเร็กทอรี') {
          ปลายทาง = (isExpandedPair)? filePair.dest: unixifyPath (path.join (filePair.dest, src));
        } else {
          dest = filePair.dest;
        }

        ถ้า (grunt.file.isDir (src)) {
          grunt.verbose.writeln ('กำลังสร้าง' + dest.cyan);
          grunt.file.mkdir (dest);
          tally.dirs ++;
        } else {
          grunt.verbose.writeln ('คัดลอก' + src.cyan + '->' + dest.cyan);
          grunt.file.copy (src, dest, copyOptions);
          นับไฟล์ ++;
        }
      });
    });

คุณทราบหรือไม่ว่าคำตอบที่ยอมรับนั้นไม่ถูกต้อง ดูคำตอบด้านล่างนี้
David Pärsson

คำตอบ:


59

Expand ช่วยให้คุณระบุว่าคุณต้องการสร้างเส้นทางปลายทางแบบเต็ม (เช่น:) /path/missing1/missing2หรือสร้างไดเร็กทอรีสุดท้ายเมื่อมีพาเรนต์เท่านั้น ( /path/existing/missing)


4
อ่าดังนั้นมันจึงเป็นตัวเลือก -p สำหรับ mkdir เข้าใจแล้วขอบคุณ!
Patrick

6
คำตอบนี้ไม่ถูกต้อง มันง่ายที่สุด
David Pärsson

3
-1. นี่เป็นเรื่องที่ทำให้เข้าใจผิด - จากคำตอบนี้ที่ฉันลบออกexpand: trueโดยคิดว่าฉันไม่ต้องการมันจากนั้นบิลด์ของฉันก็หยุดทำงาน
Claudiu

82

เนื่องจากexpandเป็นส่วนหนึ่งของ Grunt และไม่เฉพาะเจาะจงสำหรับ Grunt-Contrib-copy ข้อมูลเกี่ยวกับเรื่องนี้สามารถพบได้ในAPI การกำหนดค่าไฟล์ของ Grunt :

ตั้งค่าexpandเพื่อtrueเปิดใช้งานตัวเลือกต่อไปนี้:

  • cwdการsrcจับคู่ทั้งหมดสัมพันธ์กับ (แต่ไม่รวม) เส้นทางนี้
  • srcรูปแบบที่จะจับคู่เทียบกับcwd.
  • dest คำนำหน้าเส้นทางปลายทาง
  • extแทนที่ส่วนขยายที่มีอยู่ด้วยค่านี้ในdestเส้นทางที่สร้างขึ้น
  • extDotใช้เพื่อระบุว่าช่วงเวลาที่ระบุส่วนขยายนั้นอยู่ที่ใด สามารถใช้'first'(นามสกุลเริ่มต้นหลังจากช่วงเวลาแรกในชื่อไฟล์) หรือ'last'(นามสกุลเริ่มต้นหลังจากช่วงเวลาสุดท้าย) และตั้งค่าโดยค่าเริ่มต้นเป็น'first'.
  • flattenลบส่วนของเส้นทางทั้งหมดออกจากdestเส้นทางที่สร้างขึ้น
  • renameฟังก์ชันนี้เรียกใช้สำหรับsrcไฟล์ที่ตรงกันแต่ละไฟล์ (หลังจากเปลี่ยนชื่อนามสกุลและทำให้แบนราบ) destและจับคู่srcเส้นทางจะถูกส่งผ่านในและฟังก์ชั่นนี้จะต้องกลับมาใหม่destค่า หากสิ่งเดียวกันdestถูกส่งกลับมากกว่าหนึ่งครั้งแต่ละรายการsrcที่ใช้จะถูกเพิ่มลงในอาร์เรย์ของแหล่งที่มา

นอกจากนี้ก็ดูเหมือนว่าdestจะได้รับการพิจารณาให้เป็นไดเรกทอรีปลายทางถ้าการตั้งค่าไปexpandtrue


ตอบดีกว่า. แต่สิ่งนี้ไม่ได้รับการบันทึกไว้ที่ใด?
syonip

ฉันพบเอกสารดังกล่าวหลังจากดูครั้งที่สองแล้วและฉันได้อัปเดตคำตอบตามนั้น
David Pärsson

ฉันได้เพิ่มตัวอย่างที่เป็นประโยชน์ที่มีให้ในเอกสาร ชัดเจนมากขึ้นในขณะนี้
Rémi Becheras
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.