2013-02-07 2 views
0

필자는 Require.js를 사용하여 모듈로 구성된 Backbone 응용 프로그램을 가지고 있습니다. 이 모듈 중 하나에는 Handlebars 도우미가 포함되어 있습니다.이 도우미에는 각보기에 대한 모든 HTML 템플릿에서 합법적 인 머리글을 가져 오는 데 사용하는 메서드가 있습니다. 헤더는 HTML 주석에 포함 된, 그래서 그것을 벗겨 다음 정규식을 사용한다 :패턴을 일치 시키지만 정규식 리터럴 (r.js 최적화 및 uglify 문제)과 일치하지 않는 Javascript 정규식?

/<!--[\s\S]*?-->/g 

를 자, 내가 (CONCATENATE/컴파일/작게하다) r.js를 사용하여 응용 프로그램을 최적화 할 때, 내가 뭘 r.js의 onBuildWrite() 방법을 사용하여 HTML 주석의 동일한 제거 : 이제

onBuildWrite: function (moduleName, path, contents) { 
    var htmlCommentRegex = /<!--[\s\S]*?-->/g; 

    return contents.replace(htmlCommentRegex, ""); 
}, 

은, 불행하게도,이 즉, 핸들 도우미를 포함하는 Require.js 모듈은 r.js 최적화 된 빌드, 에 들어갔습니다 때 도우미 내의 정규 표현식 문자가에서 제거되어 내 전체 r.js 빌드가 폭탄을 만듭니다.

나는 선택적으로 도우미를 제외하고 모든 모듈에 onBuildWrite()에 정규식을 적용하여 문제를 해결하기 위해 시도했다 :

onBuildWrite: function (moduleName, path, contents) { 
    var htmlCommentRegex = /<!--[\s\S]*?-->/g; 

    if (moduleName !== "helpers/handlebars.compileClean") { 
     contents = contents.replace(htmlCommentRegex, ""); 
    } 

    return contents; 
}, 

하지만이 uglification이 r.js에 사용하는 경우 작업 표시되지 않습니다 구성; 정규 표현식이 도우미를 포함하여 전체 빌드 스크립트에서 실행중인 것으로 보이며 빌드가 폭탄 밖으로 나옵니다.

r.js 구성에서 uglify가 비활성화 된 경우 모든 것이 정상적으로 작동합니다.

누구나 uglify가이 문제를 해결할 수있는 아이디어가 있습니까? HTML 주석을 캡처하지만 HTML 주석 regex 리터럴을 무시하고 다른 정규 표현식으로 전환하면 문제가 해결됩니까? 그렇다면 정규식은 어떻게 생겼을까요? [<] 클래스 <가 멀리 RE 프로세서에 관한 한,하지만 지금은 RE가 더 이상 자신을 일치에 해당

var htmlCommentRegex = /[<]!--[\s\S]*?-->/g; 

단일 문자 :

+0

JS를 HTML에 어떻게 주입합니까? 어쩌면 당신의 패턴은 HTML 주석으로 작용합니다 ... – kbec

+0

내 JS 주입? 미안 해요, 나는 따르고 있지 않아. –

+0

백본과 다른 것들을 사용하고 있지는 않지만 어떻게 든 HTML에 자바 스크립트를로드해야합니다. – kbec

답변

1
는 귀하의 정규 표현식을 변경

. 당신은 문자열에서 RE 만들 수

var htmlCommentRegex = /<\!--[\s\S]*?-->/g; 

또는 :

또 다른 방법은 RE에서 리터럴 문자 중 하나 탈출하는 것입니다

var htmlCommentRegex = new RegExp('<!'+'--[\s\S]*?-->', 'g'); 

r.js 만약 모든이 다시 최적화한다 원본 텍스트에 다음을 입력하십시오.

var commentPrefix = '<!'; 
var htmlCommentRegex = new Regexp(commentPrefix+'--[\s\S]*?-->', 'g'); 

이 코드를 실행 취소하기에 충분한 코드 분석을 수행하지 않기를 바랍니다. 난처.

+0