39

grunt task をインストールしました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/**/*ですか?

4

5 に答える 5

57

解決策を見つけました:

次の行は必要ありません。

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/'}
       ]
于 2013-03-05T11:23:16.830 に答える
3

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

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

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

README から:

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

(私はそのプロジェクトのユーザーに過ぎません (少なくとも今のところ))。

于 2013-07-29T08:28:44.267 に答える
0

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

{src: ['./css/**', './img/**', './js/**', './release/**', './lib/**', './locale/**'], dest: 'output/toolkit/'},
{expand: true, cwd: './', src: ['**'], dest: 'output/'}
于 2013-03-04T10:31:11.960 に答える