簡體   English   中英

使用Grunt.js復制將目錄中的所有文件復制到另一個文件

[英]Copy all files from directory to another with Grunt.js copy

我正在嘗試將目錄中的所有文件復制到另一個目錄中,這是我構建過程的一部分。 對於我明確指定的單個文件,它可以正常工作,但是當我嘗試復制整個目錄時,它確實做了一些奇怪的事情,例如復制了完整的目錄結構(或根本沒有復制任何內容)。 這是我的GruntFile.js的相關部分:

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/" }
    ]
  }
},

具體來說,這是我無法開始的最后一行:

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

情況下, flatten: true選項在某些情況下可能有效,但在我看來,更常見的要求(如我的情況)是將文件夾及其子文件夾結構按原樣復制到dest 似乎在大多數情況下,如果您有子文件夾,則代碼中可能會以這種方式引用它們。 這樣做的關鍵是cwd選項,它將保留相對於指定工作目錄的文件夾結構:

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
  }
}

如果您指定文件全局,則此任務將維護文件夾結構。 您需要的是flatten選項,它將刪除結構。

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

Github存儲庫中找到其余可用選項。 希望這可以幫助。

我想補充一點,在src中更改glob的格式將修改副本的工作方式。

如上面的bmoeskau所指出的,以下內容將復制dist/ 所有內容並將其移動到path/to/dir (如果目標已經存在,則將其覆蓋)。

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

但是請注意:

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

只會復制中的文件dist/以及目錄,但不會這些目錄中的內容復制到目標。

同樣,以下帶有src: '*/*'復制內容在dist/內的目錄。 也就是說,位於dist/內的文件將不會被復制。

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

最后,與上面相同,但是src: '**/**' dist/內的文件以及dist/子目錄內的文件復制到path/to/dir 因此,目的地內將沒有文件夾。

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

必須在文件段中使用egdy而不是花括號(在Coffeescript中)...

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

如果您正在使用有角度的yeoman進行顯影,那么這是使用grunt復制的更好方法。 expand:使用cwd時需要true。 <%= yeoman.app%>只是應用程序路由('。')。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM