2016-06-17 32 views
0

私のHTMLファイルにgrunt-contrib-htmlminを使用しています。Grunt - html minifierタスクが失敗する

Gruntfile.jsは次のようになりますので、私は、node_modulesディレクトリの例外を追加しました:私は、コンソールに結果として得るものgrunt buildを実行すると

module.exports = function(grunt) { 

    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 

     htmlmin: { 
     prod: { 
      options: { 
      removeComments: true, 
      collapseWhitespace: true 
      }, 
      files: { 
      src: ['**/*.html', '!node_modules/'], 
      dest: 'prod/' 
      } 
     } 
     } 
    }); 

    grunt.loadNpmTasks('grunt-contrib-htmlmin'); 

は次のとおりである:「htmlminを実行

: prod "(htmlmin)タスク
1つのファイルを縮小しました(1失敗)
完了してエラーは発生しません。

私は4つのHTMLファイルを持っており、どれも縮小されていないため、エラーが表示されません。私はここで何が欠けているのですか?

+2

あなたは、これが実行されています唯一のタスクである、本当によろしいですか?タスクは "htmlmin:prod"と呼ばれますが、エラーメッセージは "htmlmin:dist"を参照しています。 – JJJ

+0

はすべて同じ場所にあるファイルですか? – Geraint

+0

@Geraint 2つのファイルはインクルードと呼ばれるサブディレクトリの中にありますが、問題のないソースには '**/*。html'を使用しているので、それはありますか? – brunodd

答えて

1

特定のエラーは再現できませんが、grunt設定に問題があります。

最初に、Files Object Formatを使用する場合は、宛先パスをキーとして、ソースパス(またはソースパスの配列)を値として、src-destマッピングを指定します。例えば:あなたの現在の構成で

files: { 
    'prod/minified.html': 'src/unminified.html' 
} 

srcは先のファイルパスとして解釈されます。

srcdestプロパティを意図したとおりに使用するには、Files Array Formatを使用する必要があります。

files: [{ 
    src: ['**/*.html', '!node_modules/'], 
    dest: 'prod/' 
}] 

残念ながら、これはまだ私たちの期待される出力にはなりません。修正する必要があるいくつかの問題があります。

prod/は、意図されたプレフィックスとしてではなく単一の宛先パスとして解釈されます。私たちはファイルオブジェクトにexpand: trueを設定して、gruntをbuild our files object dynamicallyに伝える必要があります。

次に、ファイル設定でflatten: trueを設定して、宛先ファイルパスを計算するときにソースファイルパスのパスを削除するようにgruntに指示する必要があります。

第三に、パターン!node_modules/のみ正確一致、文字通り "node_modulesを/" 免除されます。 node_modulesフォルダの下にあるすべてのファイルを除外するには、一致するパターンglobstar!node_modules/**を使用する必要があります。

私たちの結果は以下の通りです:

files: [{ 
    expand: true, 
    flatten: true, 
    src: ['**/*.html', '!node_modules/**'], 
    dest: 'prod/' 
}] 
+0

驚くべき、それは働いた。私はflattenと/ ** node_modulesの後に欠けていました。ありがとう、あなたはまた、それを解決するだけでなく、問題を理解するのを助けました。 – brunodd

関連する問題