2016-06-17 3 views
0

내 HTML 파일에 grunt-contrib-htmlmin을 사용하고 있습니다. 내 Gruntfile.js은 다음과 같습니다 있도록 Grunt-html minifier 작업이 실패합니다.

나는, node_modules 디렉터리에 대한 예외를 추가 :

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'); 

내가 콘솔의 결과이기 때문에 무엇을 얻을 내가 grunt build을 실행

는 "htmlmin 실행 : prod "(htmlmin) 작업
축소 된 1 파일 (1 실패)
오류없이 완료됩니다.

나는 4 개의 HTML 파일이 있으며 그 중 어느 것도 축소되지 않으며 오류가 표시되지 않습니다. 여기서 내가 무엇을 놓치고 있니?

+2

당신이 실행되고있는 유일한 작업입니다 정말 확신 :

우리의 결과

은 다음과 같다? 이 작업은 "htmlmin : prod"라고하지만 오류 메시지는 "htmlmin : dist"를 참조합니다. – JJJ

+0

은 모두 같은 위치에있는 파일입니까? – Geraint

+0

@Geraint 두 파일은 include라는 하위 디렉토리 안에 있지만, 중요하지 않은 소스에 대해 '**/* .html'을 사용하고 있기 때문에 그렇습니까? – brunodd

답변

1

특정 오류는 재현 할 수 없지만 허위 구성에 문제가 있습니다.

을 사용할 때 대상 경로를 키로 사용하고 소스 경로 (또는 소스 경로 배열)를 값으로 사용하여 src-dest 매핑을 지정합니다. 예를 들어 현재 구성으로

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

, src는 대상 파일 경로로 해석됩니다.

의도 한대로 srcdest 속성을 사용하려면 Files Array Format을 사용해야합니다.

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

불행히도, 아직 예상대로 출력되지 않습니다. 수정해야 할 몇 가지 문제가 있습니다.

prod/은 의도 한 접두사가 아닌 단일 대상 경로로 해석됩니다. 파일 개체에 expand: true을 설정하여 쓸데없는 말을 build our files object dynamically에게 알려야합니다.

다음으로 대상 파일 경로를 계산할 때 원본 파일 경로의 경로를 제거하도록 grunt에 알리기 위해 파일 config에 flatten: true을 설정해야합니다.

세 번째로 패턴 !node_modules/은 정확히 일치 인 "node_modules /"만 에서 제외합니다. node_modules 폴더 아래의 모든 파일을 제외하려면 !node_modules/**과 일치하는 globstar 패턴을 사용해야합니다.

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

정말 놀랍습니다. 나는 flatten과/** after node_modules를 놓쳤다. 고맙습니다. 문제 해결에 도움이 될뿐만 아니라 문제를 이해하는데도 도움이되었습니다. – brunodd

관련 문제