복붙노트

[RUBY-ON-RAILS] ExecJS :: ProgramError : 예기치 않은 토큰 punc«(»예상 punc«:»레이크 자산을 실행 : 생산에 사전 컴파일

RUBY-ON-RAILS

ExecJS :: ProgramError : 예기치 않은 토큰 punc«(»예상 punc«:»레이크 자산을 실행 : 생산에 사전 컴파일

내 레일을 배포 할 때 나는 다음과 같은 오류가 발생되는 앱 :

rake aborted!
   ExecJS::ProgramError: Unexpected token punc «(», expected punc «:» (line: 15, col: 14, pos: 265)

   Error
   at new JS_Parse_Error (/tmp/execjs20150524-4411-1p45n63js:2359:10623)
   at js_error (/tmp/execjs20150524-4411-1p45n63js:2359:10842)
   at croak (/tmp/execjs20150524-4411-1p45n63js:2359:19086)
   at token_error (/tmp/execjs20150524-4411-1p45n63js:2359:19223)
   at expect_token (/tmp/execjs20150524-4411-1p45n63js:2359:19446)
   at expect (/tmp/execjs20150524-4411-1p45n63js:2359:19584)
   at /tmp/execjs20150524-4411-1p45n63js:2359:28513
   at /tmp/execjs20150524-4411-1p45n63js:2359:19957
   at expr_atom (/tmp/execjs20150524-4411-1p45n63js:2359:27269)
   at maybe_unary (/tmp/execjs20150524-4411-1p45n63js:2359:30019)new JS_Parse_Error ((execjs):2359:10623)
   js_error ((execjs):2359:10842)
   croak ((execjs):2359:19086)
   token_error ((execjs):2359:19223)
   expect_token ((execjs):2359:19446)
   expect ((execjs):2359:19584)
   (execjs):2359:28513
   (execjs):2359:19957
   expr_atom ((execjs):2359:27269)
   maybe_unary ((execjs):2359:30019)

문제의 파일은 로컬 호스트에서 작동 유효합니다. 또한 실행 레이크 assests을 시도 : 사전 컴파일을 로컬 호스트에서, 모든 패스. 마지막으로, 파일, 자식 푸시 및 재배포에서 콘텐츠를 제거하려 - 여전히 같은 오류가 발생했습니다. 만 파일을 완전히 제거하는 데 도움이 재 배포.

어떤 아이디어 감사하겠습니다.

해결법

  1. ==============================

    1.여기에 당신이했던 동일한 문제에 대한 도움말을 발견했다.

    여기에 당신이했던 동일한 문제에 대한 도움말을 발견했다.

    실행 콘솔과 레일 :

    JS_PATH = "app/assets/javascripts/**/*.js"; 
    Dir[JS_PATH].each do |file_name|
      puts "\n#{file_name}"
      puts Uglifier.compile(File.read(file_name), harmony: true)
    end
    

    그것은 당신에게 파일과 Uglifier 문제를 만드는 라인을 표시합니다.

  2. ==============================

    2.그 JS 파일에, 당신은 다음과 같은 것을 가지고, 의심 :

    그 JS 파일에, 당신은 다음과 같은 것을 가지고, 의심 :

    var User = {
        getName() {
            alert("my name");
        }
    }
    

    올바른 형식으로 교체,

    var User = {
        getName: function() {
            alert("my name");
        }
    }
    

    날 위해 일했습니다.

    "("하지만 발견 : ""오류가 명확하게 기대하고 있어요, 말하고있다.

  3. ==============================

    3.그냥 같은 문제가 발생합니다.

    그냥 같은 문제가 발생합니다.

    나의 경우 누군가는 ES2015, 전 이후 지원 사용자들은 구문을 사용합니다

    function someThing(param = true) {
        // do something here
    };
    

    이것은 우리의 환경에서 지원되지된다.

    그리고 오류 메시지가 실제로 Uglifer에 의해 생성됩니다.

  4. ==============================

    4.나는 빌드 체인의 모르겠지만, 구글에 동일한 오류 메시지를 붙여 여기 있어요.

    나는 빌드 체인의 모르겠지만, 구글에 동일한 오류 메시지를 붙여 여기 있어요.

    즉 ES2015에 '약식 속성'이라고합니다. 나는 꿀꺽와 바벨 6을 사용하고 NPM을 할 필요가 바벨 - 플러그인 - 변환 - es2015 - 속기-속성 --save-DEV를 설치하고 내 바벨 플러그인 변환을 추가하고있다.

    .pipe(babel({
        plugins: [
            'transform-es2015-shorthand-properties'
        ]
    }))
    

    https://github.com/babel/babel/tree/master/packages/babel-plugin-transform-es2015-shorthand-properties

  5. ==============================

    5.나는 문제가 있었다 올바른 줄 번호를 식별 할 수 https://skalman.github.io/UglifyJS-online/를 사용할 수 있습니다. 다행히, 문제가 꿀꿀 추하게 지적했다 있었다 올바른 파일 적어도

    나는 문제가 있었다 올바른 줄 번호를 식별 할 수 https://skalman.github.io/UglifyJS-online/를 사용할 수 있습니다. 다행히, 문제가 꿀꿀 추하게 지적했다 있었다 올바른 파일 적어도

  6. ==============================

    6.같은 함수 정의 내 경우 문제에서,

    같은 함수 정의 내 경우 문제에서,

    function someFunctionName(param1, param2=defaultValue){
      //code 
    }
    

    이 Uglifier에서 지원하지 않는로 인해 위의 함수 정의에 나는 오류가 발생했습니다. 기본 매개 변수는 ES6 / ES2015 언어 사양입니다.

    위의 문제의 해결을 위해 당신은 자바 스크립트 기능에 대한 설정을 기본 매개 변수 값을 참조 할 수 있습니다

  7. ==============================

    7.라도 반의 대답으로 인해 대신 코드의 라이브러리의 문제에 당신을 위해 작동하지 않는 경우, 당신은 Uglifier를 업그레이드하고 ES6 편집을 가능하게 시도 할 수 있습니다.

    라도 반의 대답으로 인해 대신 코드의 라이브러리의 문제에 당신을 위해 작동하지 않는 경우, 당신은 Uglifier를 업그레이드하고 ES6 편집을 가능하게 시도 할 수 있습니다.

    Gemfile.lock

    gem 'uglifier', '~> 4.1'
    

    설정 / 환경 / production.rb

    config.assets.js_compressor = Uglifier.new(harmony: true)
    
  8. ==============================

    8.12 월 / 1 2019 대답 : (! 색) (9월 / 2019 년 출시) 버전 4.2.0에서 시작, Uglifier 지금 당신에게 코드를 일으키는 라인을 보여주는 아름다운 디버그 출력을 보여줍니다.

    12 월 / 1 2019 대답 : (! 색) (9월 / 2019 년 출시) 버전 4.2.0에서 시작, Uglifier 지금 당신에게 코드를 일으키는 라인을 보여주는 아름다운 디버그 출력을 보여줍니다.

    나는 Uglifier :: 오류 가졌다 : 예기치 않은 문자 '' '오류가 나는 심지어이 페이지의 다른 모든 솔루션을 다음 찾을 수 없습니다.

    그래서 Gemfile로 이동하여 적어도 4.2로 당신의 Uglifier을 설정합니다 :

    # Use Uglifier as compressor for JavaScript assets
    gem 'uglifier', '>= 4.2'
    

    를 업데이트 할 번들 업데이트 uglifier를 실행합니다.

    그리고 바로 출력 보는 것은, 당신이 뭔가를 보여줄 것이다 :

  9. ==============================

    9.역 추적 오류를 확인하는 가장 좋은 방법은 나를 위해 손상된 파일에 대한 정보를 제공하지 않기 때문에 사용 자식 양분이다.

    역 추적 오류를 확인하는 가장 좋은 방법은 나를 위해 손상된 파일에 대한 정보를 제공하지 않기 때문에 사용 자식 양분이다.

    그것은 당신이 그 소개하고 버그를 저지 찾을 수 있습니다.

    먼저 자식 양분 시작의 당신이 마스터에있는 가정하자 :

    $ git bisect start
    $ git bisect bad 
    

    그런 다음 이전, 작업 버전으로 다시 이동의 20 개정 전에 가정하자.

    $ git checkout HEAD~20
    

    동일한 명령을 실행

    $ RAILS_ENV=production rake assets:precompile
    

    그것이 작동하는 경우에 당신은 좋은 등의 개정을 표시 :

    $ git bisect good.
    

    출력 표시이 좋은 / 나쁜 등을 기반으로 : 자식이 다른 버전으로 이동합니다, 당신은 다시 (사전 컴파일 자산) 같은 명령을 실행합니다.

    1 분 미만에서 당신은이 문제를 도입하는 것이 커밋 무엇을 찾을 수 있어야합니다.

  10. from https://stackoverflow.com/questions/30422437/execjsprogramerror-unexpected-token-punc-expected-punc-when-running by cc-by-sa and MIT license