11

Grunt 0.4.1 と Grunt-contrib-copy バージョン 0.4.1 を使用しています。src ディレクトリから配布ディレクトリにイメージをコピーしようとしていますが、イメージ ディレクトリの内容だけではなく、src ディレクトリ全体をコピーしています。つまり、これはdist/images/src/images/...を作成していますが、結果は単にdist/images/...にしたいのです

これが私のコピータスクです:

copy: {
  images: {
    files: {
      'dist/images/': 'src/images/**/*'
    }
  }
}

そして、次のように実行されています。

// Default task.
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-cssmin');
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.registerTask('default', ['less', 'concat', 'uglify', 'cssmin', 'copy']);

src/imagesのサブディレクトリのみがdist/imagesにコピーされるようにするにはどうすればよいですか?

これらのファイルは既に圧縮されており、ビルド中に宛先にコピーするだけで済みます。

4

2 に答える 2

19

私の問題を実際に修正したのは、コピー元のルートディレクトリ構造を「cwd」ディレクティブで指定し、次にsrcを上記とまったく同じように指定することでした。これを投稿するために戻ってきたところ、基本的に私が思いついたのと同じ解決策を見ました。これが私のために働いたものです:

copy: {
  images: {
    files: [
      { 
        expand: true,
        cwd: 'src/images/', 
        src: ['**/*.{png,jpg,svg}'], 
        dest:'dist/images/' 
      }
    ]
  }
}

「cwd」プロパティを使用すると、コピー元のソースのルートを定義できます。これは、コピーされたファイルのパスには含まれません。したがって、私の場合、「cwd」を「src/images」として定義することで、ソースを「**/*.{png,jpg,svg}」として定義できます。これにより、ソース画像のすべてのサブディレクトリが見つかりますディレクトリにコピーし、私が提供した拡張子を持つファイルのみをコピーします。これにより、必要な結果が得られます:dist/images/...すべてのサブディレクトリが期待どおりです。

「cwd」を使用しないと、grunt-contrib-copy はソース ツリー構造全体を文字通りコピー先にコピーします。「cwd」プロパティを使用すると、あるファイル構造からサブディレクトリとファイルを選択して、別のファイル構造にコピーできます。

于 2013-10-18T00:15:52.093 に答える
4

flattenディレクトリツリーを削除するオプションを指定する必要があります。

copy: {
    images: {
        expand:     true,
        cwd:        'src/images/',
        src:        ['**/*'],
        dest:       'dist/images/',
        filter:     'isFile',
        flatten:    true
    }
}
于 2013-10-16T22:17:17.007 に答える