2013-03-04 27 views
37

Tôi đã cài đặt tác vụ grunt grunt-contrib-copy. Tôi đã nhúng nó vào số Gruntfile.js và tải tác vụ qua grunt.loadNpmTasks('grunt-contrib-copy');.Định cấu hình tác vụ sao chép grunt để loại trừ các tệp/thư mục

Hiện tại tôi đang sử dụng cấu hình sau để tạo thư mục có tập hợp con các tệp/thư mục js của tôi.

copy: { 
      options: { 
       processContent: [], 
       processContentExclude: ['build/**', 'bin/**', '.*', '*.orig', '*.bak', '.*/**', '*.log', 'dist/**', 'test/**', 'dev/**', 'pyserver/**', 'node_modules/**', 'doc/**'] 
      }, 
      du: { 
       files: [ 
        {src: ['.conf1', '.conf2', './config.js'], dest: 'output/toolkit/', filter: 'isFile'}, 
        {src: ['./css/**/*', './img/**/*', './js/**/*', './release/**/*', './lib/**/*', './locale/**/*'], dest: 'output/toolkit/'}, 
        {expand: true, cwd: './', src: ['**'], dest: 'output/'} 
       ] 
      } 
     } 

này hoạt động tốt, nhưng mọi lúc tôi chạy grunt sao chép nó thoát với thông báo lỗi sau:

Copying Gruntfile.js -> output/Gruntfile.js 
Warning: Error while processing "Gruntfile.js" file. Use --force to continue. 

Tôi muốn loại trừ Gruntfile.js và tất cả các tập tin trong *.lessjs/**/*. Đã thử nó với !(.less), !.less, !(*.less), !(./Grunfile.js), !(*Gruntfile.js) ... Nhưng không có gì hoạt động. Đã thêm nó vào mảng processContentExclude, nhưng cũng không thành công.

Vậy làm cách nào để loại trừ Gruntfile.js và tất cả các tệp ít hơn trong cấu trúc thư mục js/**/*?

Trả lời

51

Tìm thấy giải pháp:

Không cần phải cho những dòng này:

files: [ 
      {src: ['.conf1', '.conf2', './config.js'], dest: 'output/toolkit/', filter: 'isFile'}, 
      {src: ['./css/**/*', './img/**/*', './js/**/*', './release/**/*', './lib/**/*', './locale/**/*'], dest: 'output/toolkit/'}, 
      {expand: true, cwd: './', src: ['**'], dest: 'output/'} 
     ] 

{expand: true, cwd: './', src: ['**'], dest: 'output/'} là một bước bản sao mới, sao chép tất cả các file từ ./ đến output. Đó là cho tôi không cần thiết, bởi vì các dòng trên đã được sao chép các tập tin cần thiết để output/toolkit.

Vì vậy, hai dòng sau thực hiện công việc. Không cần lựa chọn hay bất cứ thứ gì khác. Để giữ các tệp *.less'!**/*.less' thực hiện công việc.

files: [ 
      {src: ['.conf1', '.conf2', 'config.js'], dest: 'output/toolkit/', filter: 'isFile'}, 
      {src: ['css/**', 'img/**', 'js/**', 'release/**', 'lib/**', 'locale/**', '!**/*.less'], dest: 'output/toolkit/'} 
     ] 
+18

Để bỏ qua các thư mục, sử dụng '! Workingdir/omitted/**' – Ben

0

Tôi cho rằng điều này nên thực hiện. Không cần /**/*. /** bao gồm tất cả các file trong đường dẫn và subdirs nó

{src: ['./css/**', './img/**', './js/**', './release/**', './lib/**', './locale/**'], dest: 'output/toolkit/'}, 
{expand: true, cwd: './', src: ['**'], dest: 'output/'} 
+1

nhờ cho câu trả lời của bạn, tôi đã thay đổi/**/* đến/** nhưng điều đó không giúp. Hành vi vẫn như cũ. – mybecks

+0

Chỉ cần tự hỏi nếu bạn đang chạy 'Gruntfile.js' từ đầu ra' locaton/Gruntfile.js'. Nếu vậy, hãy chạy nó từ một số vị trí khác hoặc loại trừ nó. –

+0

Không cần dòng cuối cùng của tôi bắt đầu bằng {exapnd ...}. Chỉ cần hai dòng {src ...}. – mybecks

3

Nếu bạn có sự tự do để chuyển sang một công việc khác nhau Grunt:

Ngoài ra còn có https://github.com/clavery/grunt-copy-to trong đó có một rõ ràng "bỏ qua" tùy chọn để xác định tập tin và thư mục để bỏ qua. README trong Github hiển thị một cấu hình ví dụ bao gồm các tùy chọn bỏ qua.

Nó hoạt động hơi khác so với bản sao thông thường vì nó tôn trọng thời gian sửa đổi. Nhưng điều đó thực sự có thể được chào đón (trong trường hợp của tôi).

Từ README:

Giống như grunt-contrib-copy nhưng chỉ copy những file mà mới và duy trì thời gian sửa đổi cho các tập tin sao chép. Hữu ích cho việc tạo các thư mục xây dựng mà sau này có thể được đồng bộ hóa bằng các công cụ dựa vào thời gian sửa đổi tệp.

(Tôi chỉ là một người sử dụng của dự án đó (ít nhất cho đến nay).)

+2

bạn thực sự không cần thuộc tính này nếu bạn thêm '!' Vào các mẫu tại thuộc tính 'src', và đây là một mẫu có thể được sử dụng trong bất kỳ nhiệm vụ grunt nào khác. http://gruntjs.com/configuring-tasks#globbing-patterns –

12

tôi muốn loại trừ tất cả.file gz trong bản sao của tôi và các tùy chọn này đã làm công việc cho tất cả các thư mục

{ 
    expand: true, 
    cwd: './build/www/', 
    src: [ '**', '!**/*.gz' ], 
    dest: './mydDest' 
} 

Vì vậy, có thể thử !**/*.less, !gruntfile.js (không dấu ngoặc)

2

Giả sử rằng 'Gruntfile.js' là trong thư mục gốc, dòng cuối cùng trong các tùy chọn sao chép của bạn đang định cấu hình để sao chép mọi thứ trong thư mục gốc thành 'output /'.

Nếu dự định này, hãy thêm '! Gruntfile.js' vào mảng đường dẫn tệp src của bạn.

{ 
    expand: true, 
    cwd: './', 
    src: ['**'],  // ex. src: ['**', '!Gruntfile.js'], 
    dest: 'output/' 
} 

Tham khảo các giải pháp từ này threadoriginal thread

Các vấn đề liên quan