JSLint가 갑자기보고합니다 : "엄격한 사용"기능 양식 사용


930

나는 진술을 포함한다 :

"use strict";

대부분의 Javascript 파일 시작 부분에.

JSLint는 이에 대해 경고 한 적이 없습니다. 그러나 지금은 다음과 같이 말합니다.

"엄격한 사용"기능 양식을 사용하십시오.

"기능 형식"이 무엇인지 아는 사람이 있습니까?

답변:


1010

'use strict';줄 바꿈 함수의 첫 번째 명령문으로 포함 하므로 해당 함수에만 영향을줍니다. 이렇게하면 엄격하지 않은 스크립트를 연결할 때 문제가 발생하지 않습니다.

Douglas Crockford의 최신 블로그 게시물 Strict Mode Is Coming To Town을 참조하십시오 .

그 게시물의 예 :

(function () {
   'use strict';
   // this function is strict...
}());

(function () {
   // but this function is sloppy...
}());

업데이트 : 즉각적인 기능 (예 : 노드 모듈)으로 랩핑하지 않으려는 경우 경고를 비활성화 할 수 있습니다.

대한 JSLint (당 Zhami ) :

/*jslint node: true */

대한 JSHint :

/*jshint strict:false */

또는 ( Laith Shadeed 당 )

/* jshint -W097 */

JSHint에서 임의의 경고를 사용하지 않으려면 JSHint 소스 코드 에서 맵을 확인하십시오 ( docs에 자세히 설명되어 있음 ).

업데이트 2 : JSHintnode:boolean옵션을 지원합니다 . .jshintrcgithub 참조하십시오 .

/* jshint node: true */

1
Visual Studio 용 JSLint에서는 "글로벌 ES5 엄격 허용"
Jowen

10
그러나 이것은 노드 애플리케이션에는 적합하지 않습니다. -1
bevacqua

1
안녕하세요 니코, 당신이 입력 할 수 있습니다 노드에 대해 답을 갱신 : / * jshint -W097 * /이 경고 비활성화
가 마감 Shadeed

@LaithShadeed 대안은 /*jshint strict:false */, 내가하고있는 일을 더 명확하게하는 것입니다 (알지 못하는 숫자 코드에 특별한 이점이없는 한)
bdukes

2
@Noumenon 실제로 보일러 플레이트가 아니며 코드가 실행되는 환경을 변경하는 지시어입니다. 즉, 새로운 ES6 구문 (모듈 및 클래스)은 기본적으로 엄격합니다 ( ecma-international.org/ecma-262/6.0/ 참조). # sec-strict-mode-code )이므로 앞으로 어디에서나 흩어질 필요는 없습니다. 그 동안 IIFE의 모든 코드를 줄 바꿈하여 "use strict";파일 당 한 번만 지정 하면됩니다.
bdukes

217

NodeJS 용 모듈을 작성중인 경우 이미 캡슐화되어 있습니다. JSLint에게 파일 맨 위에 포함 시켜서 노드가 있다고 알려주십시오.

/*jslint node: true */

2
참고로,이 옵션은 JSLint에서 작동하지만 JSHint는이 지시문과 함께 엄격 경고를 해제하지 않습니다. JSHint의 경우/*jshint strict:false */
bdukes

4
JSHint v2.9.2로 나에게 적합합니다. "node": true.jshintrc에 추가
RyanM

71

대신 jshint 를 사용하는 것이 좋습니다 .

를 통해이 경고를 억제 할 수 있습니다 /*jshint globalstrict: true*/.

라이브러리를 작성하는 경우 nodejs와 마찬가지로 코드가 모듈로 캡슐화 된 경우 전역 엄격을 사용하는 것이 좋습니다.

그렇지 않으면 라이브러리를 사용하는 모든 사람을 엄격 모드로 강제 설정합니다.



4
참고 : JSHint의 globalstrict 옵션이 변경되었습니다. strict: 'global'지금 시도 하고 jshint.com/docs/options/#globalstrict를
Hovis Biddle

17

Cross Platform JavaScript 블로그 게시물에 따라 Node.js / browserify 응용 프로그램을 만들기 시작했습니다 . 그리고 새로운 Gruntfile이 jshint를 통과하지 못했기 때문에이 문제가 발생했습니다.

다행히 GruntLeanpub 책에서 답을 찾았습니다 .

지금 시도하면 Gruntfile을 스캔하고 몇 가지 오류가 발생합니다.

$ grunt jshint

Running "jshint:all" (jshint) task
Linting Gruntfile.js...ERROR
[L1:C1] W097: Use the function form of "use strict".
'use strict';
Linting Gruntfile.js...ERROR
[L3:C1] W117: 'module' is not defined.
module.exports = function (grunt) {

Warning: Task "jshint:all" failed. Use --force to continue.

두 가지 오류는 Gruntfile이 Node 프로그램이기 때문에 기본적으로 JSHint는 module및의 문자열 버전을 인식하거나 허용하지 않습니다 use strict. Node 프로그램을 받아 들일 JSHint 규칙을 설정할 수 있습니다. jshint 작업 구성을 편집하고 옵션 키를 추가합시다 :

jshint: {
  options: {
    node: true
  },
}

node: truejshint에 추가 하여 optionsjshint를 "노드 모드"로 설정하면 두 가지 오류가 모두 제거되었습니다.


16

프로젝트의 루트에 다음 내용으로 .jslintrc (또는 jshint의 경우 .jshintrc) 파일을 추가하십시오.

{
    "node": true
}

15

문자열 형식에는 본질적으로 잘못된 것이 없습니다.

엄격하지 않은 자바 스크립트를 연결하는 것을 걱정하기 위해 "글로벌"엄격한 형식을 피하는 대신, 엄격하지 않은 엄격하지 않은 자바 스크립트를 수정하는 것이 좋습니다.


0

모든 사람들이이 질문에서 "갑자기"부분을 놓쳤다 고 생각합니다. 아마도 .jshintrc에 구문 오류가 있으므로 '브라우저'행을 포함하지 않습니다. json 유효성 검사기를 통해 오류를 확인하십시오.


1
온라인 JSLint 서비스가 질문을 할 때 2010 년에 해당 기능을 추가했기 때문에 갑자기 발생했습니다.
Quentin

0
process.on('warning', function(e) {
    'use strict';
    console.warn(e.stack);
});
process.on('uncaughtException', function(e) {
    'use strict';
    console.warn(e.stack);
});

파일의 시작점에이 줄을 추가하십시오


-4

모든 코드를 엄격히 사용 "use strict";하려면 JavaScript 시작 부분에 추가 하십시오.

그러나 일부 코드 만 엄격하게 사용하려면 함수 형식을 사용하십시오. 어쨌든, 나는 당신이 더 나은 코더가 될 수 있기 때문에 JavaScript의 시작 부분에서 그것을 사용하는 것이 좋습니다.


8
"use strict";JS 파일의 맨 위에 만 놓을 때 실제로이 오류가 발생 하므로 완전히 사실이 아닐 수도 있습니다.
moesef

@moesef 코드에 오류가 있기 때문입니다. 코딩 기술을 향상시키고 코드를 "느슨하게"줄이는 데 도움이됩니다. 선언되지 않은 변수 등은 허용되지 않습니다.
Jason Stackhouse

11
@JasonStackhouse : 사실이 아닙니다. JSLint는 "글로벌"형식의 "use strict";코드 를받지 않습니다 . "use strict;"함수로 싸인 경우 에만 허용 됩니다. (JS_Hint_를 사용하면 전역 양식을 사용할 수 있습니다. 필요한 설정은 위의 답변을 참조하십시오).
peterflynn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.