web-dev-qa-db-ja.com

grunt copyタスクを設定してファイル/フォルダーを除外する

Gruntタスク_grunt-contrib-copy_をインストールしました。 _Gruntfile.js_に埋め込み、grunt.loadNpmTasks('grunt-contrib-copy');を介してタスクをロードします。

現在、次の構成を使用して、jsファイル/フォルダーのサブセットでフォルダーを作成しています。

_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/'}
                ]
            }
        }
_

これは正常に機能しますが、Grunt Copyを実行するたびに次のエラーメッセージが表示されて終了します。

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

_Gruntfile.js_および_*.less_内のすべての_js/**/*_ファイルを除外したいと思います。 !(.less), !.less, !(*.less), !(./Grunfile.js), !(*Gruntfile.js)で試してみました...しかし、何も機能しません。 processContentExclude配列に追加しましたが、成功しませんでした。

それでは、_Gruntfile.js_とフォルダー構造_js/**/*_内のすべてのファイルを除外するにはどうすればよいですか?

38
mybecks

ソリューションを見つけました:

これらの行は必要ありません。

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/'}は新しいコピーステップであり、./からoutputにすべてのファイルをコピーするためです。上記の行はすでに必要なファイルをoutput/toolkitにコピーしているため、これは必要ありません。

そのため、次の2行で仕事をします。オプションなどは必要ありません。 *.lessファイル'!**/*.less'を締め出すことは仕事をします。

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

私はコピー内のすべての.gzファイルを除外したかったのですが、このオプションはすべてのフォルダーに対してジョブを実行しました

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

試してみてください!**/*.less, !gruntfile.js(括弧なし)

15
StackHola

「Gruntfile.js」がルートディレクトリにあると仮定すると、コピーオプションの最後の行は、ルートのすべてを「output /」にコピーするように設定しています。

これが意図されている場合、srcファイルパスの配列に「!Gruntfile.js」を追加します。

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

これからこれらのソリューションを参照してください thread および 元のスレッド

3
daxeh

別のGruntタスクに変更する自由がある場合:

https://github.com/clavery/grunt-copy-to もあります。これには、除外するファイルとディレクトリを指定する明示的な「無視」オプションがあります。 GithubのREADMEは、無視オプションを含む設定例を示しています。

変更時間を尊重するため、通常のコピーとは少し異なります。しかし、それは実際には歓迎されるかもしれません(私の場合はそうでした)。

READMEから:

Grunt-contrib-copyと似ていますが、新しいファイルのみをコピーし、コピーされたファイルの変更時間を維持します。ファイルの変更時間に依存するツールを使用して後で同期できるビルドディレクトリを作成するのに便利です。

(私はそのプロジェクトのユーザーのみです(少なくともこれまで)。)

3
Risadinha

これでうまくいくと思います。 /**/*は必要ありません。 /**は、パスとそのサブディレクトリ内のすべてのファイルをカバーします

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