ใช้อึกเพื่อเลือกและย้ายไดเร็กทอรีและไฟล์


99

ฉันกำลังใช้ gulp เพื่อเรียกสคริปต์ทุบตีที่ล้างdist/ไดเร็กทอรีของฉันและย้ายไฟล์ที่เหมาะสมไปยังคลีนไดเร็กทอรี ฉันต้องการให้สิ่งนี้เสร็จสิ้นด้วยอึกเพราะฉันไม่แน่ใจว่าสคริปต์จะทำงานบนระบบไฟล์ที่ไม่ใช่ * nix
จนถึงตอนนี้ฉันใช้โมดูล gulp-clean เพื่อล้างdist/ไดเร็กทอรี แต่เมื่อฉันพยายามย้ายไดเร็กทอรีที่ต้องการและไฟล์ไปยังโฟลเดอร์ dist ไดเร็กทอรีจะว่างเปล่า

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/โฟลเดอร์ได้อย่างไร

คำตอบ:


163

คุณต้องรวมbaseตัวเลือกเป็น src ซึ่งจะรักษาโครงสร้างไฟล์ตามที่คุณต้องการ:

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
ทำงานได้อย่างสมบูรณ์หลังจากจัดระเบียบไฟล์ใหม่แล้วเท่านั้น แต่เหตุผลของคุณฟังดูดีฉันจึงทำเครื่องหมายคำตอบของคุณว่าถูกต้อง ขอบคุณ.
makenova

2
ในการทำตรงกันข้ามให้ใช้ gulp-flatten stackoverflow.com/questions/21153338/…
Tony Gutierrez

2
โปรดทราบว่าคุณไม่มีreadตัวเลือกใน src เป็นหมายเหตุfalse(ตั้งค่าเป็นtrueค่าเริ่มต้น)
yndolok

3
เมื่อฉันทำเช่นนี้มันเป็นการคัดลอกด้วยไดเรกทอรีรากทั้งหมด
Nomadme

5

เดิมเป้าหมายคำถามเดียวไดเรกทอรี (โฟลเดอร์ aka) ในของมันgulp.srcเช่นgulp.src(['_locales', ...ในตัวอย่างนี้_localesเป็นชื่อของที่ไดเรกทอรี

คำตอบที่ยอมรับจะใช้globรูปแบบ ในการgulp.srcกำหนดเป้าหมายไฟล์ที่ใดก็ได้ในไดเร็กทอรีเหล่านั้นเช่นgulp.src(['./_locales/**/*.*', ...(สังเกตเครื่องหมายดอกจันคู่และเครื่องหมายดอกจันfilename.extension ) คำตอบที่ยอมรับได้ผล ...

... แต่คำตอบที่ยอมรับจะเน้นbaseตัวเลือกเท่านั้น :

คุณต้องรวมbaseตัวเลือกเป็น src ...

ฉันทดลองและพบว่า:

  1. พูดอย่างเคร่งครัดไม่จำเป็นต้องใช้baseตัวเลือกเพื่อให้บรรลุสิ่งที่ OP ถาม: "... และย้ายไฟล์ที่เหมาะสมไปยังคลีนไดเร็กทอรี" baseตัวเลือกที่ไม่แน่นอนรักษาโฟลเดอร์แฟ้ม + โครงสร้าง (ตามที่อธิบายไว้ในคำตอบที่ได้รับการยอมรับ) แต่baseตัวเลือกที่ไม่เพียงพอที่จะย้ายไฟล์ที่เป็นสหกรณ์ถาม การรักษาโครงสร้างโฟลเดอร์ + ไฟล์น่าจะเป็นสิ่งที่ OP คาดหวังดังนั้นคำตอบที่ยอมรับจึงดี แต่ ...

  2. เพียงแค่จะย้ำสิ่งที่ไม่ย้ายไฟล์มันเป็นglobรูปแบบ:

    1. เครื่องหมายดอกจันคู่ ( .../**/...) ค้นหาซ้ำในโฟลเดอร์ย่อยทั้งหมดและโฟลเดอร์ย่อยของโฟลเดอร์ย่อย ฯลฯ

    2. ดอกจัน Filename.extension ( .../*.*) พบว่าไฟล์ทุกชื่อและทุกส่วนขยาย ดังนั้นฉันคิดว่าส่วนนี้สมควรได้รับการเน้นมากที่สุด!

  3. คำตอบที่ยอมรับจะเปลี่ยนแปลงอย่างอื่น มันจะเพิ่มคำนำหน้าของแต่ละข้อโต้แย้งเส้นทางส่งผ่านไปยัง./ gulp.srcฉันคิดว่าไม่จำเป็น / ซ้ำซ้อน ถ้าไม่มี./(เหมือนในคำถาม OP) ในเส้นทางที่ได้รับการแก้ไขเมื่อเทียบกับไดเรกทอรีปัจจุบัน - ผลในพฤติกรรมเดียวกัน แต่อาจเป็นแนวทางปฏิบัติที่ดีที่จะใช้ไฟล์./

แจ้งให้เราทราบหากเข้าใจผิด ...

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