엄격 모드 호환성
VM 난독화는 코드가 엄격 모드에서 실행되는지 컴파일 시점에 알아야 합니다. 코드가 엄격 모드 동작에 의존한다면 이를 명시적으로 선언해야 합니다.
이유는 무엇인가요? VM은 실행 전에 코드를 바이트코드로 컴파일합니다. 엄격 모드 고유의 동작(예: this 바인딩, 중복
매개변수, arguments 객체 동작)에 맞는 올바른 바이트코드를 생성하려면 컴파일 중에 엄격 모드 컨텍스트를 알아야 합니다.
strictMode 옵션은 난독화 도구가 이를 판단하는 방식을 제어합니다. strictMode: null(기본값)과 strictMode: false에서는 코드가 스스로 선언한 곳에서만 엄격 모드로 취급됩니다. 명시적인 'use strict'; 지시문, ES 모듈 구문, 클래스 메서드가 여기에 해당합니다. 나머지는 모두 비엄격(sloppy) 모드로 컴파일됩니다. strictMode: true는 모든 입력을 엄격 모드로 취급합니다. 최종 번들이 실제로 실행되는 컨텍스트에 맞추세요.
파일 수준 엄격 모드
파일 맨 위에 'use strict';를 추가하면 모든 코드에 엄격 모드가 적용됩니다.
함수 수준 엄격 모드
특정 함수에만 엄격 모드가 필요하다면 해당 함수 안에 'use strict';를 추가하세요.
흔한 문제: 번들러나 빌드 도구가 'use strict';를 자동으로 추가하는데(예를 들어 CommonJS나 일반 스크립트 소스를
엄격 모드 출력으로 감싸는 번들러) 번들링 전에 소스를 난독화하면, VM은 엄격 모드임을 알지 못합니다. 소스 파일에 지시문을 추가하거나,
strictMode: true를 설정하거나, 번들링한 뒤에 난독화하세요.
