구문 오류 : 엄격 모드에서 const 사용


241

node.js로 작업하고 있으며 내 js 파일 중 하나에서 사용 const하고 "strict mode"있습니다. 실행하려고 할 때 오류가 발생합니다.

SyntaxError: Use of const in strict mode.

가장 좋은 방법은 무엇입니까?

편집하다:

'use strict'
const MAX_IMAGE_SIZE = 1024*1024; // 1 MB

크롬에서 @thefourtheye 확인, ff는 잘 작동합니다.
Zaheer Ahmed

사용하십시오 var. 세미콜론 추가'use strict';
Adrian Preuss

@ZaheerAhmed 실제로 Node.js yaar를 사용하고 있습니다. 그것은 잘 작동합니다.
thefourtheye

아 ...에 실패 ideone.com
thefourtheye

최신 노드 버전 v5.3.0을 업데이트 한 후에는 제대로 작동합니다.
zangw

답변:


284

constlet(ES6과 조화 일명) 인 ECMAScript 2015의 일부이며, Node.js를 0.10 또는 0.12에서 기본적으로 사용되지 않았다. Node.js 4.x 이후 "V8에서 안정적인 것으로 간주되는 모든 배송 [ES2015] 기능은 기본적으로 Node.js에서 켜져 있으며 어떤 종류의 런타임 플래그도 필요하지 않습니다." Node.js 문서에는 기본적으로 활성화 된 ES2015 기능과 런타임 플래그가 필요한 사용자에 대한 개요가 있습니다. 따라서 Node.js 4.x 이상으로 업그레이드하면 오류가 사라집니다.

Node.js 0.10 및 0.12에서 일부 ECMAScript 2015 기능 ( const및 포함 let) 을 활성화합니다 . 하모니 플래그로 노드 프로그램을 시작하십시오. 그렇지 않으면 구문 오류가 발생합니다. 예를 들면 다음과 같습니다.

node --harmony app.js

그것은 모두 엄격한 js가 어느쪽에 있는지에 달려 있습니다. const서버 측에서 선언 과 함께 엄격 모드를 사용 하고 harmony 플래그로 서버를 시작하는 것이 좋습니다 . 클라이언트 측에서는 모든 클라이언트 브라우저가 선언을 지원하지는 않으므로 Babel 또는 이와 유사한 도구를 사용하여 ES2015를 ES5로 변환해야합니다 const.


8
이것은 가장 완전하고 관련있는 답변입니다.
zamnuts

엄격한 모드는 리터럴 표현식이 아닌 플래그 노드를 사용하여 적용 할 수도 있습니다. --harmony --use_strict app.js
Adria

7
"use_strict"플래그 사용에 대해 조언하고 싶습니다. 작성되지 않은 통역사에서 다른 사람의 코드를 실행 중입니다. 항상 'use strict';자신을 사용 하되, 타사 코드가 스스로 결정하도록하십시오.
Thomas Jensen

1
FWIW 노드 v8.1을 실행하지만 armfh 버전 (raspberry pi)을 실행하는 것과 동일한 문제가 있습니다.
James

238

이것이 nodejs에서 발생하는 경우 이전 버전의 nodejs 때문입니다. 다음을 사용하여 노드를 업데이트하십시오.

1) NPM 캐시를 지우십시오.

sudo npm cache clean -f

2) 'n'이라는 작은 도우미를 설치하십시오.

sudo npm install -g n

3) 최신 안정 NodeJS 버전 설치

sudo n stable

https://stackoverflow.com/a/19584407/698072 에서 가져온 nodejs 지침 업데이트


3
2 단계를 수행하는 동안이 "npm ERR! notsup 지원되지 않는 npm ERR! notsup 운영 체제 또는 아키텍처와 호환되지 않습니다 : n@2.1.4"입니다.
VSO

1
사용 사례에 따라 node버전 을 지정하는 것이 더 안전 할 수 있습니다 . 예를 들어,이 글을 쓰는 시점 sudo n 6.9.4에서 최신 LTS sudo n stable를 설치 7.4.0합니다. 분명히, 그것은 중대한 변화이므로주의하십시오 n stable. 또는 sudo n lts최신 LTS를 설치하십시오.
jfmercer

1
centos 6.5에서 작동합니다. 이전에 다음과 같은 오류가 발생했습니다. "SyntaxError : 엄격 모드에서 const 사용" 감사합니다
Himanshu Chauhan

1
이렇게하면 --harmony 플래그가없는 레거시 시스템에서 문제가 해결되었습니다. 설정 : crontab의 스크립트를 사용하여 화면 npm 시작 모니터를 시작하려고하면 cli에서 스크립트를 실행할 때 엄격한 오류가 발생했습니다. 이전 노드 버전은 우분투 12.04.5 LTS에서 실행되는 0.10.48이었습니다.이 단계를 수행 한 후 소프트 링크 / usr / bin / node를 / etc / alternatives / node에서 /usr/local/n/versions/node/8.0으로 변경했습니다. .0 / bin / node 및 모든 것이 방금 작동했습니다. 감사합니다!
Brian Layman

1
이것에 대한 멍청한 감사, 그것은 그 문제를 해결할뿐만 아니라 SCA 로컬을 구축 할 때의 모든 작은 작은
우물

22

일반적으로이 오류는 코드가 실행되는 노드 버전이 예상보다 오래된 경우에 발생합니다. (즉, 0.12 이상).

nvm을 사용하는 경우 올바른 버전의 노드를 사용하고 있는지 확인하십시오. 엄격 모드에서 const에 대한 node.green호환성을 확인할 수 있습니다

다른 게시물에서 비슷한 문제를 발견하고 답변 을 자세하게 게시했습니다.


1
WebStorm에서 노드 프로젝트를 실행할 때이 문제가 발생했습니다. /usr/bin/node리포지토리의 로컬 버전은 Node 8.2.1을 실행했지만 WebStorm은 내 폴더 (0.10.46)를 확인했습니다.
Shadoninja

20

노드를 업데이트 한 후 한 가지 중요한 단계는 노드 바이너리를 최신 설치된 노드 버전에 연결하는 것입니다.

sudo ln -sf /usr/local/n/versions/node/6.0.0/bin/node /usr/bin/node  

1
설치된 버전을 어떻게 알 수 있습니까?
Jose Llausas

1
노드의 현재 버전이 실행에 의해 설치된 위치를 찾을 수 있습니다which node
스티브

또한 "n 안정"을 실행할 때 디렉토리를 볼 수 있습니다. mkdir : /usr/local/n/versions/node/8.0.0 따라서 / usr / local / n / versions / node /로 이동하면됩니다. 어떤 디렉토리가 있는지 확인하십시오.
Brian Layman

@JoseLlausas의 node --version버전 번호 등 밖으로 인쇄v0.10.29
마르쿠스

15

이것은 아마도 모든 사람을위한 해결책은 아니지만 나에게 적합했습니다.

NVM을 사용하는 경우 실행중인 코드에 올바른 버전의 노드를 활성화하지 않았을 수 있습니다. 재부트하면 기본 버전의 노드가 시스템 기본값으로 다시 변경됩니다.

잘 작동했던 react-native로 작업 할 때이 문제가 발생했습니다. 이 문제를 해결하려면 nvm을 사용하여 올바른 버전의 노드를 사용하십시오.


2
위에서 언급 한 "솔루션"을 설명하는 코드가 있습니까?
Kermit_ice_tea

예, 이것은 내 초기 문제였습니다. 어쨌든 오래된 centos 버전의 노드 및 gcc 버전 호환성 문제로 인해 다른 Linux 서버로 전환해야했습니다.
로봇 70

@Kermit_ice_tea 질문의 동일한 코드입니다. 버그는 노드 버전에 있으며 NVM을 사용하여 버그가없는 버전으로 설정하면 해당 코드가 전달됩니다. nvm use version-number-you-need당신이해야 할 전부입니다.
boatcoder

8

질문이 제기 된 이후로 const키워드 의 초안 은 이미 ECMAScript 2015의 일부로 실제 표준 입니다. 또한 Node.js의 현재 버전은 플래그 없이 const 선언지원합니다--harmony .

위하면 지금 실행할 수 있습니다 말했다 node app.js으로 app.js:

'use strict';
const MB = 1024 * 1024;
...

구문 설탕과 엄격 모드의 이점을 모두 얻습니다.


메가 바이트 MB는 10의 거듭 제곱이고, 메가 바이트 는 MiB2의 거듭 제곱입니다. 즉, 1MB = 1e61MiB = 1024 * 1024. 위키 피 디아를 참조하십시오 메비 바이트
DJDaveMark

0

최근에 비슷한 문제가 발생하여이 Q & A에서 끝났습니다. 이것은 OP가 찾고 있던 솔루션이 아니지만 비슷한 문제를 가진 다른 사람들을 도울 수 있습니다.

PM2 를 사용하여 프로젝트를 실행하고 주어진 스테이징 서버에서 실제로 오래된 버전의 Node, NPM 및 PM2가있었습니다. 그러나 모든 것을 업데이트했지만 동일한 오류가 계속 발생했습니다.

SyntaxError : 엄격 모드에서 const 사용.

응용 프로그램을 여러 번 중지하고 시작하려고했습니다. 또한 모든 것을 다시 업데이트하려고했습니다. 아무것도 효과가 없었습니다. 내가 달릴 때 경고가 나타날 때까지 pm2 start:

>>>> 인 메모리 PM2가 오래되었습니다.
>>>> $ pm2 update
메모리 PM2 버전 : 0.15.10
로컬 PM2 버전 : 3.2.9

잡았다! 을 실행 한 후 pm2 update마침내 응용 프로그램을 예상대로 실행할 수있었습니다. 더 이상 "엄격 모드에서 연속"오류가 없습니다.


-2

const는 ECMAScript에서 지원되지 않습니다. 엄격 모드를 지정하면 구문 오류가 발생합니다. 코드가 모든 브라우저와 호환되도록하려면 const 대신 var를 사용해야합니다. 나는 이상적인 해결책은 아니지만 그것이 무엇인지 알고 있습니다. JavaScript에서 읽기 전용 속성을 만드는 방법이 있지만 ( 순수 JavaScript에서 읽기 전용 속성을 구현할 수 있습니까? 참조 ) 시나리오에 따라 과도하게 작동 할 수 있습니다.

아래는 MDN의 브라우저 호환성 정보입니다 .

브라우저 호환성

const의 현재 구현은 Mozilla 전용 확장이며 ECMAScript 5의 일부가 아닙니다. Firefox & Chrome (V8)에서 지원됩니다. Safari 5.1.7 및 Opera 12.00부터 이러한 브라우저에서 const를 사용하여 변수를 정의하면 나중에 해당 값을 변경할 수 있습니다. Internet Explorer 6-10에서는 지원되지 않지만 Internet Explorer 11에는 포함되어 있습니다. const 키워드는 현재 var로 선언 된 변수와 같이 함수 범위에서 상수를 선언합니다.

적어도 버전 13 이후의 Firefox는 상수를 다시 선언하면 TypeError를 발생시킵니다. 상수에 다른 값을 할당하면 주요 브라우저 중 어느 것도 통지 또는 오류를 생성하지 않습니다. 이러한 조작의 리턴 값은 지정된 새 값의 리턴 값이지만 Firefox 및 Chrome (최소한 버전 20 이후)에서만 재 할당이 실패합니다.

const는 ECMAScript 6에 의해 정의되지만 의미가 다릅니다. let 문으로 선언 된 변수와 마찬가지로 const로 선언 된 상수는 블록 범위가됩니다.


3
constECMAScript를 6에서 지원되고 널리 지원됩니다 kangax.github.io/compat-table/es6/#const를 하지만 넌 답변을 마우스 오른쪽 - 'use strict';const혼합하지 않습니다.
dotnetCarpenter

빠른 테스트에 따르면 constSafari 7에서는 다시
선언 할 수

21
브라우즈 호환성 은 걱정할 필요가 없습니다. 이것은 Node.js입니다
zamnuts

-2

의 사용은 const엄격 모드는 크롬 (41) 현재의 릴리스와 함께 제공되는 이미 출시 크롬 41 베타 및 지원 그것.


6
명확히하기 위해 OP가 Node.js를 요청한 이후 브라우저 호환성은 관련이 없다고 언급하고 싶습니다. 그러나 어쨌든 그 대답에는 4 가지 공감대가 있었고 다른 관련 답변은 가려졌습니다.
Dan Dascalescu

-3
cd /
npm install -g nave
nave use 6.11.1
node app.js

리눅스 서버의 경우
Ayhmi

1
스택 오버플로에 오신 것을 환영합니다. 답변에 기여할 때 코드 설명을 모두 제공하는 것이 가장 좋습니다 .
O. Jones

2
설명이 없기 때문에 투표하십시오. nave 패키지를 설치해야하는 이유 ..
Sean83

왜 그런 해결책이 효과가 있습니까? 설명이 필요합니다.
Paul Isaris

설명이 없지만 여기에 설명 된 명령을 실행 한 후에 만 ​​오류가 해결되었습니다. npm install -g nave; nave use 6.11.1 +1
Ruben Alves
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.