2017-10-16 19 views
1

나는 레일 프로젝트 (pdfmake js 플러그인 포함)를 가지고 있습니다. 나는 assets\javascripts 폴더에 pdfmake.min.js 파일을 넣어 application.js로 추가 : 서버, 내가 관련된 한 자산 설정 준비에레일에서 min.js 파일을 축소하기 위해 uglifier를 사용할 때의 오류

//= require pdfmake.min 

그러나

config.serve_static_assets = true 

    config.assets.js_compressor = :uglifier 

    # Do not fallback to assets pipeline if a precompiled asset is missed. 
    config.assets.compile = true 

    # Generate digests for assets URLs. 
    config.assets.digest = true 

을, 나는 준비 서버에 오류가 발생했습니다 :

ReferenceError: Can't find variable: n 

이 오류는 개발 환경에서 발생하지 않으므로 js 컴파일로 인해 발생했다고 생각됩니다.

관련된 소스 코드 :

function(module, exports, __webpack_require__) { 

    /* WEBPACK VAR INJECTION */(function(Buffer) {// Generated by CoffeeScript 1.7.1 
    (function() { 
     var DecodeStream, iconv; 

     try { 
     iconv = __webpack_require__(87); 
     } catch (_error) {} 

     DecodeStream = (function() { 
     var key; 

     function DecodeStream(buffer) { 
      this.buffer = buffer; 
      this.pos = 0; 
      this.length = this.buffer.length; 
     } 

     ...... 

     })(); 

     module.exports = DecodeStream; 

    }).call(this); 

min.js 지방에서 동일 어플리케이션 uglifier

function(t, e, n) { 
     (function(e) { 
      (function() { 
       var r, 
        i; 
       try { 
        i = n(84) 
       } catch (t) {} 
       r = function() { 
        function t(t) { 
         this.buffer = t, this.pos = 0, this.length = this.buffer.length 
        } 
        var n; 
        ...... 
       }(), t.exports = r 
      }).call(this) 

코드없이 uglifier 사용시 상세히 설명하기 일으켰다. 스테이징 중 uglifier 후 js

function(A, t, e) { 
     (function(A) { 
      (function() { 
       var t, 
        i; 
       try { 
        i = e(84) 
       } catch (n) {} 
       t = function() { 
        function t(A) { 
         this.buffer = A, this.pos = 0, this.length = this.buffer.length 
        } 
        var e; 
        ...... 
       }(), n.exports = t 
      }).call(this) 

위의 코드에 따르면 uglifiermoduleBufferA으로 잘못 지정합니다. 이 문제를 어떻게 해결할 수 있습니까? 준비에

  • uglifier :

    나는 어떤 생각을 가지고있다. 준비와 제작에 좋은가?

  • pdfmake.min.jspdfmake.js으로 바꿉니다.
  • 다른 의견은 있습니까?
+0

uglifier gem의 어떤 버전을 사용하고 있습니까? 때때로 버그가 수정되었습니다. 어느 쪽이든 나는 uglification 전에 일반 pdfmake.js를 사용하여 갈 것입니다. 저는 여러분이 여기에서 경험할 수있는 여러 번의 축소 과정을 통해 비슷한 문제를 겪었습니다. – Phil

+0

안녕하세요 @ 필, 내 uglifier 보석의 버전은 2.5.0입니다. 나는 평범한 pdfmake.js도 고려하고있다. – Stephen

+0

우, 그건 나에게 조금 오래된 소리. Rails 4.2 프로젝트에서 필자의 uglifier에 대한 작업은 3.2.0으로, 가장 최신이라고 생각합니다. 대부분 비 - 축소 된 JS (하나의 단순한 것이 축소되어 잘된 것처럼 보임)와 함께 저에게 잘 작동합니다. dev 머신에서 업그레이드 할만한 가치가 있을지도 모릅니다. – Phil

답변

1

이전 경험을 바탕으로 이전에 축소 된 자바 스크립트가 uglifier 문제를 일으킬 수 있음을 발견했습니다. 이것은 uglifier의 구형 버그와 관련이있을 수 있습니다. uglifier는 동일한 코드를 여러 번 통과시켜 실행하면 실패합니다.

안정적인 결과를 얻으려면 unugified pdfmake.js를 사용하여 uglifier에 문제가 없어야합니다.

또한 uglifier gem 버전이 2014 (https://github.com/lautis/uglifier/releases?after=v2.5.2 참조) 인 경우 다른 문제를 피하기 위해 uglifier gem을 업그레이드하는 것이 좋습니다.

1

Phil의 답변에 감사드립니다. 나는 그것이 uglifier에 의해 야기 된 것을 확인할 수 있으며 최신 3.2이이 문제를 해결할 것입니다. 이 대답에서, 나는 그것을 더 깊이 파헤 칠 것이다.

새 레일 프로젝트를 만들고 pdfmake.min.js을 가져오고 uglifier 버전을 사용하는 경우 2.5을 사용하면 문제가 발생할 수 있습니다. 나는 2.5에서 3.2으로 버전을 테스트했고 3.1이 문제를 해결한다는 것을 발견했다.

3.0에서 3.1으로 커밋을 확인한 결과 UglifyJS2.7으로 업데이트했습니다. 또한 git ref으로 gem을 구성하여 테스트 한 결과이 업데이트로 문제가 해결되었는지 확인했습니다.

결론적으로 항상 최신 버전으로 업데이트하십시오. 여전히 문제를 해결하지 못하면 축소 된 j를 일반 j로 대체하십시오.