Programing

ExecJS :: ProgramError : 예상치 못한 토큰 구두점«(», 레이크 자산 실행시«:»예상 구두점 : 프로덕션에서 사전 컴파일

lottogame 2020. 11. 29. 09:30
반응형

ExecJS :: ProgramError : 예상치 못한 토큰 구두점«(», 레이크 자산 실행시«:»예상 구두점 : 프로덕션에서 사전 컴파일


Rails 앱을 배포 할 때 다음 오류가 발생합니다.

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)

문제의 파일이 유효하며 localhost에서 작동합니다. 나는 또한 rake assests:precompilelocalhost에서 실행 시도했지만 모두 통과했습니다. 마지막으로 git push 및 redeploy 파일에서 콘텐츠를 제거하려고 시도했지만 여전히 동일한 오류가 발생했습니다. 파일을 완전히 제거하고 다시 배포하면 도움이됩니다.

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


여기서 나는 당신이 가진 동일한 문제에 대한 도움을 찾았습니다.

Rails 콘솔을 실행하고 :

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

Uglifier가 문제를 일으키는 파일과 줄을 보여줍니다.


그 js 파일에 다음과 같은 것이 있다고 생각합니다.

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

올바른 형식으로 교체하면

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

나를 위해 일했습니다.

오류는 ":"를 예상하고 있지만 "("를 찾았습니다.


동일한 문제가 발생합니다.

제 경우는 ES2015 이후로만 지원되는 구문을 사용하는 사람입니다.

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

이것은 우리 환경에서 지원되지 않습니다.

그리고 오류 메시지는 실제로 Uglifer에서 생성됩니다.


빌드 체인을 잘 모르겠지만 동일한 오류 메시지를 Google에 붙여 넣어 여기에 왔습니다.

ES2015에서는이를 '속기 속성'이라고합니다. Gulp와 함께 Babel 6을 사용 npm install babel-plugin-transform-es2015-shorthand-properties --save-dev하고 있으며 해당 변환을 수행하고 내 babel 플러그인에 추가 해야합니다 .

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

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


https://skalman.github.io/UglifyJS-online/사용 하여 문제가 발생한 올바른 줄 번호를 식별 할 수 있습니다 . 고맙게도 최소한 문제가있는 올바른 파일이 grunt uglify에 의해 지적되었습니다.


In my case problem with function definition like,

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

Due to above function definition I was getting error, as it is not supported by Uglifier. Default parameters is ES6/ES2015 language specification.

For solution to above problem you can refer Set a default parameter value for a JavaScript function


If Radovan's answer isn't working for you due to a problem in a library instead of your code, you can try upgrading Uglifier and enabling ES6 compilation.

Gemfile.lock

gem 'uglifier', '~> 4.1'

config/environments/production.rb

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

As the backtrace doesn't provide information about the corrupted file, for me the best way to identify the error is use git bisect.

It allows you to find the commit that introduces a bug.

Let's suppose you are on master, first you start git bisect:

$ git bisect start
$ git bisect bad 

Then you go back to a previous, working revision, let's suppose 20 revision ago.

$ git checkout HEAD~20

You run the same command

$ RAILS_ENV=production rake assets:precompile

If it works you mark revision as good:

$ git bisect good.

git will jump to another revision, you run same command again (assets:precompile) and bassed on the output mark it as good / bad.

In less than 1 minute you should be able to find what's the commit that introduced the issue.

참고URL : https://stackoverflow.com/questions/30422437/execjsprogramerror-unexpected-token-punc-expected-punc-when-running

반응형