2012-12-30 21 views
11

Đối với một ứng dụng trang duy nhất mà tôi đang làm việc trên, tôi có cấu trúc sau:Làm thế nào để sao chép các file ngọc biên soạn vào một thư mục đích bằng grunt

  • quận
    • css
    • js
    • lib
    • partials
    • index.html
  • src
    • css
    • js
    • lib
    • xem
      • partials
      • index.jade

Danh bạ dist sẽ được máy chủ tốc hành sử dụng để phục vụ dự án. Tôi có nhiệm vụ grunt tầm thường (sử dụng grunt-contrib sạch, grunt-contrib-copy) để làm sạch quận và sao chép src/css, src/js, src/lib để quận.

Sự cố xảy ra với src/views. Thư mục này chứa các tệp tin ngọc cần được biên dịch thành các tệp html. Sau khi biên soạn, tôi muốn chúng ở số dist (index.html trong phần gốc, partials như subdir).

Hiện tại tôi đang sử dụng nhiệm vụ grunt-contrib-jade để biên dịch và sao chép tệp ngọc bích. Tôi muốn sao chép chúng sang dist, vì tôi không muốn thêm các tập tin html đã biên dịch vào kiểm soát nguồn. Nhưng bây giờ điều này là không thực sự khả thi, vì bạn phải xác định tất cả các tập tin ngọc bích (nay chỉ có một số ít, nhưng điều đó sẽ phát triển):

jade: { 
     compile: { 
      options: { 
       pretty: true 
      }, 
      files: { 
       // TODO make one line 
       'dist/index.html': ['src/views/index.jade'], 
       'dist/partials/banner.html': ['src/views/partials/banner.jade'], 
       'dist/partials/dashboard.html': ['src/views/partials/dashboard.jade'], 
       'dist/partials/navbar.html': ['src/views/partials/navbar.jade'], 
       'dist/partials/transfer.html': ['src/views/partials/transfer.jade'] 
      } 
     } 
    }, 

Có cách nào để sử dụng grunt-contrib-ngọc tác vụ (hoặc một công cụ khác) với bộ lọc thư mục? Như sau:

jade: { 
     compile: { 
      options: { 
       pretty: true 
      }, 
      dir: { 
       'dist': ['src/views'] 
      } 
     } 
    } 
+0

Bạn đã thử "Định dạng mảng tệp" [được mô tả ở đây] (https://github.com/gruntjs/grunt/wiki/Configuring-tasks) chưa? Ví dụ (sử dụng tác vụ concat) đặt thuộc tính 'dest' thành một thư mục:' tệp: [{src: ['src/bb.js', 'src/bbb.js'], dest: 'dest/b/'}] '. Có khả năng nhiệm vụ 'jade-contrib' cũng hỗ trợ định dạng này. – smithclay

+0

Không hoạt động. Nó sao chép tất cả các tệp vào một tệp có tên '* .html' :) Đã thử 'các tệp: grunt.file.expandMapping ([' **/*. Jade '],' dist ', {cwd:' src/views '}) 'được mô tả trên cùng một trang, nhưng tôi nhận được expandMapping không được xác định. – asgoth

Trả lời

10

Tôi đã kết thúc nâng cấp lên 0,4 (gây ra một số vấn đề khác, nhưng tôi sẽ có thể xử lý).

Với phiên bản grunt 0.4 có thể sử dụng grunt.file.expandMapping:

jade: { 
     compile: { 
      options: { 
       pretty: true 
      }, 
      files: grunt.file.expandMapping(['**/*.jade'], 'dist/', { 
       cwd: 'src/views', 
       rename: function(destBase, destPath) { 
        return destBase + destPath.replace(/\.jade$/, '.html'); 
       } 
      }) 

     } 
    }, 
+0

kết thúc bằng cách sử dụng một cái gì đó tương tự như thế này, và nó hoạt động hoàn hảo. Cảm ơn! – uxtx

20

nhỏ làm rõ từ Grunt wiki - expand mapping:

grunt.file.expandMapping(patterns, dest [, options]) 

Lưu ý rằng trong khi phương pháp này có thể được sử dụng để lập trình tạo ra một mảng các file cho một nhiệm vụ đa, các khai báo cú pháp để thực hiện việc này được mô tả trong phần "Xây dựng đối tượng tệp động" của số Configuring tasks guide được ưu tiên.

Giả sử ở trên, cấu hình sẽ trông như thế này:

files: [ { 
    expand: true, 
    src: "**/*.jade", 
    dest: "dist/", 
    cwd: "src/views", 
    ext: '.html' 
} ]; 

Cùng một kết quả với cấu hình tường thuật.

+1

+1: Đây thực sự là một lựa chọn. chức năng đổi tên thậm chí không cần thiết vì thuộc tính ext thực hiện công việc. Tuy nhiên, phiên bản 0,4 của grunt là cần thiết, những gì không rõ ràng ngay từ đầu. – asgoth

+2

Tôi không biết tại sao nhưng tôi phải xóa các tệp biểu mẫu []: vì vậy các tệp ': {...}' hoạt động cho tôi và 'tệp: [{...}]' lỗi ném 'Đối tượng # không có method 'indexOf'' – netsmertia

+0

+1: Tùy chọn 'ext' là những gì tôi bị thiếu. – Seth

3

Nếu bạn muốn thay đổi chỉ là phần mở rộng của các tập tin từ .jade để .html, tùy chọn khác sẽ được sử dụng các thông số flattenext như vậy:

jade: { 
    compile: { 
     options: { 
      data: { debug: false, title: 'My awesome application' } 
     }, 
     files: grunt.file.expandMapping(['**/*.jade'], '<%= yeoman.dist %>/views', { 
      cwd: '<%= yeoman.app %>/views', 
      flatten: true, 
      ext: '.html' 
     }) 
    } 
} 

Hoặc thậm chí tốt hơn (như đã giải thích here) :

jade: { 
    compile: { 
     options: { 
      data: { debug: false, title: 'My awesome application' }, 
      pretty: true 
     }, 
     files: [ 
      { 
       expand: true, 
       cwd: '<%= yeoman.app %>/views', 
       src: ['**/*.jade'], 
       dest: '<%= yeoman.dist %>/views', 
       ext: '.html' 
      } 
     ]} 
} 

Cảm ơn.

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