ビルドプロセスの一環として、ディレクトリ内のすべてのファイルを別のディレクトリにコピーしようとしています。明示的に指定した個々のファイルに対しては正常に機能しますが、ディレクトリ全体をコピーしようとすると、ディレクトリ構造全体をコピーする(またはまったくコピーしない)などの奇妙なことをします。 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リポジトリ で利用可能な残りのオプションを見つけます。お役に立てれば。
glob insrcの形式を変更すると、コピーの動作が変更されることを追加したいと思います。
上記のbmoeskauで指摘したように、次のコードはeverythingを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/
およびディレクトリ内のファイルのみをコピーしますが、notはそれらのディレクトリの内容を宛先にコピーします。
また、次のsrc: '*/*'
を使用すると、onlyはdist/
内のコンテンツを含むディレクトリをコピーします。つまり、dist/
のすぐ内側のファイルはコピーされません。
copy: {
files: {
expand: true,
dest: 'path/to/dir',
cwd: 'dist/',
src: '*/*'
}
}
最後に、上記と同じですが、src: '**/**'
は、dist/
内のファイルとdist/
内のファイルのみをコピーしますonlypath/to/dir
へのサブディレクトリ。そのため、宛先内にフォルダーはありません。
copy: {
files: {
expand: true,
dest: 'path/to/dir',
cwd: 'dist/',
src: '*/*',
flatten: true,
filter: 'isFile'
}
}
(Coffeescriptの)ファイルセグメントに代わりに中括弧を使用する必要がありました...
copy: {
files: [
cwd: 'path/to/files'
src: '**/*'
dest: 'dist/files'
expand: true
]
}
angular yeomanで開発している場合、これはgruntでコピーするより良い方法です。 expand:cwdを使用する場合はtrueが必要です。 <%= yeoman.app%>は単なるアプリルート( '。')です。
{
expand: true,
cwd: '<%= yeoman.app %>/data',
dest: '<%= yeoman.dist %>/data',
src: ['**']
}