2013-09-23 22 views
84

Dizindeki tüm dosyaları, oluşturma işlemimin bir parçası olarak başka bir dizine kopyalamaya çalışıyorum. Açıkça belirttiğim tek tek dosyalar için iyi çalışıyor ama tüm dizini kopyalamaya çalıştığımda tam dizin yapısını (veya hiç bir şey) kopyalar gibi tuhaf şeyler yapar. Bir dosyayı belirtirsenizTüm dosyaları dizinden Grunt.js kopyasına kopyalayın.

 { src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" } 

cevap

138

this answer gibi flatten: true seçeneği bazı durumlarda işe yarayabilir, ancak olduğu gibi o dest için, (benim durumumda olduğu gibi) daha sık gereksinim bir klasör ve alt klasör yapısını kopyalamak için geliyor bana . Çoğu durumda, eğer alt klasörleriniz varsa, muhtemelen bu şekilde kod içinde başvuruyorlar. nasıl kopya değiştirecektir

copy: { 
    files: { 
    cwd: 'path/to/files', // set working folder/root to copy 
    src: '**/*',   // copy all files and subfolders 
    dest: 'dist/files', // destination folder 
    expand: true   // required when using cwd 
    } 
} 
+0

Teşekkürler - bu sorunun cevabını sorduğumda daha çok aradığım şey doğru. Önceki cevabın neden olduğu düzleşmeyi ele almayı öğrendim ama sinir bozucu oldu. –

+12

Bunun için bir saatten fazla kaybettim ... Eğer 'cwd' seçeneklerini kullanırsanız,' expand: true' öğesini çevirdiğinizden emin olun. 'Expand: true' ayarlamazsanız, cwd düzgün çalışmayacaktır. – ducin

+2

Dizin yollarının '/' ile bitmesini ve bu çalışma için 'flatten: false' yazmasını sağladım. –

42

Bu görev klasör yapısını koruyacak:

copy: { 
    myvoice: { 
    files: [ 
     { src:"src/html/index.html", dest:"dist/myvoice/index.html" }, 
     { src:"src/html/css/style.css", dest:"dist/myvoice/css/style.css" }, 
     { src:"src/html/js/require.js", dest:"dist/myvoice/js/require.js" }, 
     { src:"build/myvoice/main.js", dest:"dist/myvoice/js/main.js" }, 
     { src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" } 
    ] 
    } 
}, 

Özellikle bu işe alınamıyor son çizgi: İşte benim GruntFile.js alakalı parçasıdır topak. İstediğiniz, yapıyı kaldıracak olan flatten seçeneğidir.

{ 
    expand: true, 
    flatten: true, 
    src: ['src/html/css/fonts/**'], 
    dest: 'dist/myvoice/css/fonts/', 
    filter: 'isFile' 
} 

Github repo bulunan seçenekler kalanını bulun. Bu yardımcı olur umarım.

22

Ben src içinde glob biçimini değiştirmeden eklemek istiyoruz: Bunu yapmanın anahtarı belirtilen çalışma dizinine klasör yapısı göreli koruyacak cwd seçenektir Eserleri.

Yukarıdaki gibi şu dist/herşeyi kopyalayıp path/to/dir (zaten varsa hedef üzerine yazarak) taşımak olacaktır bmoeskau tarafından işaret etti.

copy: { 
    files: { 
    expand: true, 
    dest: 'path/to/dir', 
    cwd: 'dist/', 
    src: '**' 
    } 
} 

Not ancak:

copy: { 
    files: { 
    expand: true, 
    dest: 'path/to/dir', 
    cwd: 'dist/', 
    src: '*' 
    } 
} 

dist/ yanı sıra dizinleri içindeki dosyaları kopyalamak sadece Will, ancak hedefe bu dizinlerin içeriğini kopyalamazolacaktır. Ayrıca

, dist/ içindeki içeriklerle src: '*/*' olacak sadece kopya dizinleri ile aşağıdaki. Yani, sadece dist/'un içindeki dosyalar kopyalanmayacaktır. Yukarıdaki ile aynı Nihayet
copy: { 
    files: { 
    expand: true, 
    dest: 'path/to/dir', 
    cwd: 'dist/', 
    src: '*/*' 
    } 
} 

, fakat src: '**/**'path/to/dir için dist/ alt dizinleri içine dist/ yanı sıra dosyaları içinde sadece dosyaları kopyalar. Yani hedefin içinde klasör yok.

copy: { 
    files: { 
    expand: true, 
    dest: 'path/to/dir', 
    cwd: 'dist/', 
    src: '*/*', 
    flatten: true, 
    filter: 'isFile' 
    } 
} 
+4

harika bir açıklama! +1 – myrocode

+2

github dokümantasyonundan daha iyi, örnekler severim – wukong

+0

+1 Yıldız sayısının ne anlama gelmesi gerektiği konusunda bir sözleşme var mıdır, örneğin '**' her zaman dosyalar ve dizinler anlamına gelir ve '*' sadece dosyalar? – CodyBugstein

0

Dosyaları bölme (Coffeescript'te) için egdy yerine kaşlı ayraç kullanmak zorunda kaldı ...Eğer açısal yeoman ile geliştiriyorsanız

copy: { 
    files: [ 
    cwd: 'path/to/files' 
    src: '**/*' 
    dest: 'dist/files' 
    expand: true 
    ] 
} 
0

, o zaman bu hırıltı ile kopyalamak için iyi bir yoldur. expand: cwd kullanırken true gerekir. <% = yeoman.app%> yalnızca uygulama rotasıdır ('.').

{ 
    expand: true, 
    cwd: '<%= yeoman.app %>/data', 
    dest: '<%= yeoman.dist %>/data', 
    src: ['**'] 
    } 
+0

Bu kod pasajı [bir açıklama dahil] [// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers] sorusunu çözebilirken, yayınınızın kalitesini artırmanıza yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerilerinizin nedenini bilmeyebileceğini unutmayın. Ayrıca, kodunuzu açıklayıcı yorumlar ile doldurmamaya çalışın, çünkü bu hem kodun hem de açıklamaların okunabilirliğini azaltır! – FrankerZ

İlgili konular