2013-05-13 3 views
26

건물 및 배치에 쓸데없는 것을 사용하는 작동하는 requirejs 프로젝트가 있습니다. 전혀 최적화를 사용하지 않으면 빌드가 문제없이 작동하며 하나의 큰 js 파일을 프로덕션 환경에 배포합니다.uglifying/optimizing에서 특정 requireJS 파일을 제외하는 방법

내가 가지고있는 문제는 내가 이미 최소화/최적화 된 버전을 가지고 있고 다시 최적화하지 않으려는 일부 외부 프레임 워크 (angularJS와 같은)가 있다는 것입니다.

현재 최적화 없이는 내 gruntfile에 별도의 경로 구성을 통해이 프레임 워크의 축소판이 포함됩니다. 정상적인 main.js에서 개발 용으로 비공식 버전이 있습니다.

이제 내 자신의 코드를 최적화하기 위해 최적화 도구를 사용하고 외부 프레임 워크를 최적화하지 않을 것입니다. 그러나 외부 프레임 워크는 결과로 나오는 큰 자바 스크립트 파일에 포함되어야합니다. 기본적으로 옵티마이 저가 일부 경우 원본 파일을 사용해야한다고 말하고 싶습니다.

이렇게 할 수 있습니까?

전체 제외 옵션 만 있기 때문에 일부 모듈이 결과로 최적화 된 js에 전혀 포함되지 않습니다.

이 내 툴툴 거리는 소리 구성입니다 :

requirejs: { 
      compile: { 
       options: { 
        baseUrl: "<%= pkg.folders.jsSource %>", 
        name: "../external-libs/almond-0.1.1", 
        include: "main", 
        mainConfigFile: "<%= pkg.folders.jsSource %>/main.js", 
        out: "<%= pkg.folders.build + pkg.name + '-' + pkg.version %>/js/main.js", 
        //logLevel: 0, 
        optimize: "uglify2", 
        //optimize: "none", 
        paths: { 
         'angular':'../external-libs/min/angular-1.0.4', 
         'jquery':'../external-libs/min/jquery-1.7.2', 
         'jquery.mobile':'../external-libs/min/jquery.mobile-1.2.0', 
         'adapter': '../external-libs/min/jquery-mobile-angular-adapter-1.2.0', 
         'moment': '../external-libs/moment-1.6.2.min', 
         'iscroll': '../external-libs/min/iscroll-4.2.5', 
         'iscrollview': '../external-libs/min/jquery.mobile.iscrollview-1.2.6', 
         'add2Home': '../external-libs/min/add2home', 
         'config/config': "config/<%=configDatei%>" 
        } 
       } 
      } 
     }, 

그리고 이것은 main.js의 관련 부분입니다 : 어떤 도움

require.config({ 
     paths:{ 
      'angular':'../external-libs/angular-1.0.4', 
      'jquery':'../external-libs/jquery-1.7.2', 
      'jquery.mobile':'../external-libs/jquery.mobile-1.2.0', 
      'adapter': '../external-libs/jquery-mobile-angular-adapter-1.2.0', 
      'moment': '../external-libs/moment-1.6.2.min', 
      'iscroll': '../external-libs/iscroll-4.2.5', 
      'iscrollview': '../external-libs/jquery.mobile.iscrollview-1.2.6', 
      'add2Home': '../external-libs/add2home' 
     }, 
     shim:{ 
      'angular':{ deps:['jquery'], exports:'angular' }, 
      'iscroll':{ deps:['jquery'], exports:'iscroll' }, 
      'iscrollview':{ deps:['jquery.mobile', 'iscroll'], exports:'iscrollview' } 
     } 
    }); 

감사합니다.

답변

19

단지 몇 가지 제안 사항은 이 아니며을 나타내며 최적화에 모듈을 포함시킵니다.

에서 require.config는 min 파일의 사용을 나타냅니다.

requirejs: { 
      compile: { 
       options: { 
        {{ all other settings }} 
        paths: { 
         'angular':'empty:', 
        } 
       } 
      } 
     }, 

    require.config:{ 
       paths:{ 
       'angular':'../external-libs/min/angular-1.0.4', 
     }, 
    } 

주의, 즉 "빈 :을"의 콜론 말에서 "빈"없습니다. 콜론을 생략하면 다음과 같은 오류 메시지가 표시됩니다.

희망이 있습니다.

+2

이 솔루션은 꿀꿀 0.4.1 나는 "빈"지정하면 0.4.1 꿀꿀-있는 contrib-requirejs 사용하여 나를 위해 작동하지 않는 파일이 여전히 추하게 과정에 포함되는을 (추하게 중 하나를 사용하여/uglify2). 하나의 파일이나 전체 앱 디렉토리를 최적화하는지에 관계없이 동일한 결과를 얻습니다. –

+1

나를 위해 작동하지 않습니다. – kaiser

+0

그란트 0.4.5, 요구 사항 2.1.9. 매력처럼 작동합니다! –

5

외부 라이브러리와 동일한 문제가 항상 답변에 대한 주석으로 다시 채워지므로이 문제를 해결하는 데 사용하는 방법입니다. 내 코드와 외부 라이브러리를위한 두 가지 작업이 있습니다. 실제로 파일을 복사하는 것입니다. 따라서 복사 작업만으로도 작동합니다. 또한 외부 라이브러리에 "빈"키를 사용하여 코드 확장에 포함되지 않습니다.

requirejs: { 
    options: { 
     mainConfigFile: '...', 
     fileExclusionRegExp '...common things to exclude...' 
    }, 
    main: { 
     options: { 
      baseUrl: '.../js', 
      dir: '.../js-built', 
      fileExclusionRegExp: /^external$/, 
      ... etc ... 
     } 
    }, 
    external: { 
     options: { 
      baseUrl: '.../js/external', 
      dir: '.../js-built/external', 
      optimize: 'none' 
     } 
    } 
} 
+0

'fileExclusionRegExp' 속성을 작동시키지 못했지만,'baseUrl'과'dir'이 다른 두 개의 연속적인 requirejs 작업을 실행하는 것이 내 작업을위한 열쇠였습니다! 감사! – kevnk

관련 문제