2016-08-28 7 views
3

Gruntのgrunt-contrib-watchプラグインを使用していくつかのファイルを表示してから、そのタスクを実行しようとしていますが、これは私のものですGruntfile.jsGrunt watch pattern.indexOfは関数ではありません

module.exports = function(grunt){ 
    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     sass: { 
      options: { 
       sourceMap: true, 
       outputStyle: 'compressed' 
      }, 
      dist: { 
       files: { 
        'static/stylesheets/main.min.css': 'static/stylesheets/sass/main.scss', 
        /*'bower_components/foundation-sites/dist/foundation.min.css': 'bower_components/foundation-sites/scss/foundation.scss'*/ 
       } 
      } 
     }, 
     uglify: { 
      dist: { 
       files: { 
        'static/javascript/main.min.js': 'static/javascript/main.js' 
       } 
      } 
     }, 
     watch: { 
      files: [ 
       '<%= sass.dist.files %>', 
       '<%= uglify.dist.files %>' 
      ], 
      tasks: [ 
       'sass', 
       'uglify' 
      ] 
     } 
    }); 

    grunt.loadNpmTasks('grunt-contrib-watch'); 
    grunt.loadNpmTasks('grunt-sass'); 
    grunt.loadNpmTasks('grunt-contrib-uglify'); 

    grunt.registerTask('default', ['watch']); 
}; 

私はそれを実行すると、それが何度も何度も繰り返し実行し、私はそれを停止すると、私はこのメッセージを持っている参照してください。タスク 待機「を見て」実行

を... 警告:pattern.indexOfは関数ではありません

私は本当に何が問題なのか分かりません。誰がここで何が起こるか知っていますか?

UPDATEは:

どうやら、問題は、私はそれを変更したため、なぜなら私はファイルを呼び出す方法は次のとおりです。 '静的/スタイルシート/ SASS/* SCSS' とそれがうまく働いたが、I他の方法がうまくいかない理由を知りたいのですが、これはもっと便利な方法だと思います。

答えて

4

grunt-contrib-watchは、filesの値として、単一のパターンストリングまたはパターンストリングの配列のどちらかが必要です。ただし、設定で使用しているテンプレートはオブジェクトに評価されます。あなたのwatch.files値を次のように評価されます。

files: [ 
    { 'static/stylesheets/main.min.css': 'static/stylesheets/sass/main.scss' }, 
    { 'static/javascript/main.min.js': 'static/javascript/main.js' } 
] 

パターンマッチングは、オブジェクトにはindexOf方法がないので、それが失敗した実行しようとします。 grunt-contrib-watchは永遠に実行されるため、監視されたファイルのリストを作成しようとするのは無限ループです。

あなたは、通常、次のようなもので、あなたの時計のファイルを構成します。

files: [ 
    'static/**/*.scss', 
    'static/**/*.js' 
] 

しかし、あなた縮小さJSファイルがソースJSファイルと同じフォルダ内にあるため、上記のあなたのケースで問題が発生します。ファイル配列に'!static/**/*.min.js'を追加することでこれを回避できますが、コンパイルしたすべてのファイルを別のフォルダに配置する方がよいでしょう。

関連する問題