2012-04-20 2 views
4

현재 내 CSS, 자바 스크립트 및 이미지 파일을 압축하고 묶는 데 Jawr을 사용하고 있습니다.Jawr이 CSS 파일의 일부분을 처리하는 것을 어떻게 중지합니까?

Jawr은 현재 이미지인지 여부에 관계없이 내 CSS 파일의 url() 링크를 모두 변환하고 있습니다. 예를 들면 :

@font-face { 
    font-family: 'NothingYouCouldSay'; 
    src: url('../fonts/NothingYouCouldSay.eot') format('eot'); 
    src: local("☺"), url('../fonts/NothingYouCouldSay.woff') format('woff'), url("../fonts/NothingYouCouldSay.otf") format("opentype"), url('../fonts/NothingYouCouldSay.ttf') format('truetype'), url('../fonts/NothingYouCouldSay.svg') format('svg'); 
    font-weight: normal; 
    font-style: normal; 
} 
Jawr가 URL의 모든() 값을 변환되지만,

다음 웹 서버가 실행 중일 때 내가 * & .png 형 만 듣고 이미지 서블릿을 구성한으로 자원을 찾을 수 없습니다 * .jpg.

@font-face { 
    font-family: 'NothingYouCouldSay'; 
    src: url('../../../cb1130234589/resources/fonts/NothingYouCouldSay.eot') format('eot'); 
    src: local("☺"), url('../../../cb1130234589/resources/fonts/NothingYouCouldSay.woff') format('woff'), url("../../../cb1130234589/resources/fonts/NothingYouCouldSay.otf") format("opentype"), url('../../../cb1130234589/resources/fonts/NothingYouCouldSay.ttf') format('truetype'), url('../../../cb1130234589/resources/fonts/NothingYouCouldSay.svg') format('svg'); 
    font-weight: normal; 
    font-style: normal; 
} 

* .woff를 이미지 서블릿 매핑에 추가하면 서블릿은 파일의 MIME 유형이 이해되지 않는다고 불평합니다.

Jawr에게 이러한 특정 URL을 처리하지 못하게 할 방법이 있습니까?

답변

2

그래서 몇 가지 다른 아이디어를 시도한 후에이 문제를 해결하기 위해 자체 맞춤형 포스트 프로세서를 작성했습니다. Jawr 코드를 가능한 한 많이 재사용합니다. Jawr이 기본 코드를 변경하면 매우 취약 할 수 있습니다.

package com.bullethq.jawr.postprocessor; 

import net.jawr.web.resource.FileNameUtils; 
import net.jawr.web.resource.bundle.factory.util.PathNormalizer; 
import net.jawr.web.resource.bundle.postprocess.BundleProcessingStatus; 
import net.jawr.web.resource.bundle.postprocess.impl.CSSURLPathRewriterPostProcessor; 
import net.jawr.web.resource.bundle.postprocess.impl.PostProcessorCssImageUrlRewriter; 

import java.io.IOException; 

public class CustomCssUrlPathRewriterPostProcessor extends CSSURLPathRewriterPostProcessor { 

    public static final String CUSTOM_URL_PATH_REWRITER = "customcsspathrewriter"; 

    public CustomCssUrlPathRewriterPostProcessor() { 
     super(CUSTOM_URL_PATH_REWRITER); 
    } 

    // ======================================================================== 
    // ======================================================================== 
    // ======================================================================== 
    @Override 
    protected PostProcessorCssImageUrlRewriter createImageUrlRewriter(BundleProcessingStatus status) { 
     return new CustomPostProcessorCssImageUrlRewriter(status); 
    } 

    // ======================================================================== 
    // ======================================================================== 
    // ======================================================================== 
    public class CustomPostProcessorCssImageUrlRewriter extends PostProcessorCssImageUrlRewriter { 

     public CustomPostProcessorCssImageUrlRewriter(BundleProcessingStatus status) { 
      super(status); 
     } 

     // ======================================================================== 
     // ======================================================================== 
     // ======================================================================== 
     @Override 
     protected String getUrlPath(String match, String originalPath, String newCssPath) throws IOException { 
      String url = match.substring(match.indexOf('(') + 1, match.lastIndexOf(')')).trim(); 

      // Remove any quotes if necessary. 
      String quoteStr = ""; 
      if (url.startsWith("'") || url.startsWith("\"")) { 
       quoteStr = String.valueOf(url.charAt(0)); 
       url = url.substring(1, url.length() - 1); 
      } 

      // We now check if the url ends in a known image file extension 
      // If not, the url is ignored. 
      if (FileNameUtils.hasImageExtension(url)) { 
       return super.getUrlPath(match, originalPath, newCssPath); 
      } else { 
       // We need to rewrite the path, as any relative URLs will 
       // not resolve correctly if Jawr has changed the CSS path. 
       url = PathNormalizer.concatWebPath(originalPath, url); 
       url = PathNormalizer.getRelativeWebPath(PathNormalizer.getParentPath(newCssPath), url); 
       return "url(" + quoteStr + url + quoteStr + ")"; 
      } 
     } 
    } 
} 

그리고, 당신은 jawr.properties이 사용자 정의 포스트 프로세서를 사용하는 Jawr을 구성해야합니다 :

어쨌든

, 여기에 내가 쓴 무엇을

jawr.custom.postprocessors.customcsspathrewriter.class=com.bullethq.jawr.postprocessor.CustomCssUrlPathRewriterPostProcessor 
jawr.css.bundle.factory.filepostprocessors=customcsspathrewriter 
+0

난 내 자신의 대답 매우 자기애 적 느낌이 문제! –

+0

감사합니다. 시간을 절약 해주었습니다 :) – uthomas

+0

안녕하세요, jawr에서 이미지 처리를 완전히 제한하는 방법 ...? –

관련 문제