[RUBY-ON-RAILS] ExecJS :: ProgramError : 예기치 않은 토큰 punc«(»예상 punc«:»레이크 자산을 실행 : 생산에 사전 컴파일
RUBY-ON-RAILSExecJS :: 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.여기에 당신이했던 동일한 문제에 대한 도움말을 발견했다.
여기에 당신이했던 동일한 문제에 대한 도움말을 발견했다.
실행 콘솔과 레일 :
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.그 JS 파일에, 당신은 다음과 같은 것을 가지고, 의심 :
그 JS 파일에, 당신은 다음과 같은 것을 가지고, 의심 :
var User = { getName() { alert("my name"); } }
올바른 형식으로 교체,
var User = { getName: function() { alert("my name"); } }
날 위해 일했습니다.
"("하지만 발견 : ""오류가 명확하게 기대하고 있어요, 말하고있다.
-
==============================
3.그냥 같은 문제가 발생합니다.
그냥 같은 문제가 발생합니다.
나의 경우 누군가는 ES2015, 전 이후 지원 사용자들은 구문을 사용합니다
function someThing(param = true) { // do something here };
이것은 우리의 환경에서 지원되지된다.
그리고 오류 메시지가 실제로 Uglifer에 의해 생성됩니다.
-
==============================
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.나는 문제가 있었다 올바른 줄 번호를 식별 할 수 https://skalman.github.io/UglifyJS-online/를 사용할 수 있습니다. 다행히, 문제가 꿀꿀 추하게 지적했다 있었다 올바른 파일 적어도
나는 문제가 있었다 올바른 줄 번호를 식별 할 수 https://skalman.github.io/UglifyJS-online/를 사용할 수 있습니다. 다행히, 문제가 꿀꿀 추하게 지적했다 있었다 올바른 파일 적어도
-
==============================
6.같은 함수 정의 내 경우 문제에서,
같은 함수 정의 내 경우 문제에서,
function someFunctionName(param1, param2=defaultValue){ //code }
이 Uglifier에서 지원하지 않는로 인해 위의 함수 정의에 나는 오류가 발생했습니다. 기본 매개 변수는 ES6 / ES2015 언어 사양입니다.
위의 문제의 해결을 위해 당신은 자바 스크립트 기능에 대한 설정을 기본 매개 변수 값을 참조 할 수 있습니다
-
==============================
7.라도 반의 대답으로 인해 대신 코드의 라이브러리의 문제에 당신을 위해 작동하지 않는 경우, 당신은 Uglifier를 업그레이드하고 ES6 편집을 가능하게 시도 할 수 있습니다.
라도 반의 대답으로 인해 대신 코드의 라이브러리의 문제에 당신을 위해 작동하지 않는 경우, 당신은 Uglifier를 업그레이드하고 ES6 편집을 가능하게 시도 할 수 있습니다.
Gemfile.lock
gem 'uglifier', '~> 4.1'
설정 / 환경 / production.rb
config.assets.js_compressor = Uglifier.new(harmony: true)
-
==============================
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.역 추적 오류를 확인하는 가장 좋은 방법은 나를 위해 손상된 파일에 대한 정보를 제공하지 않기 때문에 사용 자식 양분이다.
역 추적 오류를 확인하는 가장 좋은 방법은 나를 위해 손상된 파일에 대한 정보를 제공하지 않기 때문에 사용 자식 양분이다.
그것은 당신이 그 소개하고 버그를 저지 찾을 수 있습니다.
먼저 자식 양분 시작의 당신이 마스터에있는 가정하자 :
$ git bisect start $ git bisect bad
그런 다음 이전, 작업 버전으로 다시 이동의 20 개정 전에 가정하자.
$ git checkout HEAD~20
동일한 명령을 실행
$ RAILS_ENV=production rake assets:precompile
그것이 작동하는 경우에 당신은 좋은 등의 개정을 표시 :
$ git bisect good.
출력 표시이 좋은 / 나쁜 등을 기반으로 : 자식이 다른 버전으로 이동합니다, 당신은 다시 (사전 컴파일 자산) 같은 명령을 실행합니다.
1 분 미만에서 당신은이 문제를 도입하는 것이 커밋 무엇을 찾을 수 있어야합니다.
from https://stackoverflow.com/questions/30422437/execjsprogramerror-unexpected-token-punc-expected-punc-when-running by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 레일 - LINK_TO에 매개 변수를 전달 (0) | 2020.02.15 |
---|---|
[RUBY-ON-RAILS] 컬 : (1) 프로토콜 지원 또는 libcurl에 비활성화하지 HTTPS (0) | 2020.02.15 |
[RUBY-ON-RAILS] belongs_to와 has_one의 차이점은 무엇입니까? (0) | 2020.02.15 |
[RUBY-ON-RAILS] 여러 외래 키와 관련 레일 (0) | 2020.02.15 |
[RUBY-ON-RAILS] 내가 어떻게 활성 레코드 레일에 두 개의 서로 다른 데이터베이스와 함께 작동합니까? (0) | 2020.02.15 |