실행 환경 호환성
실제 실행 환경에 맞춰 target을 선택하세요. Browser와 Node 빌드의 방어 기능은 다를 수 있으며 Browser 대상은 Node를 대체하지 않습니다.
target
browser- Chrome, Firefox, Safari, Edge입니다.browser-no-eval-browser와 같지만 출력이eval()을 사용하지 않습니다. 대상 페이지의 Content Security Policy가eval/unsafe-eval을 금지할 때 사용하세요.node- Node.js 환경입니다. 브라우저 전용 옵션은 비활성화됩니다(이 옵션들은window/document가 필요하므로 Node에서는 아무 효과가 없거나 예외를 던집니다). 브라우저 전용 API에 의존하는 일부vmSelfDefending방어 기능, 즉 헤드리스 브라우저 탐지, iframe 기반의 깨끗한 realm 복구, 인스펙터 방지/DOM 검사는 이 대상에서 생성되지 않습니다.service-worker- Service Worker 컨텍스트입니다.window와document가 없고self전역이 다릅니다.userscript- 유저스크립트 관리자 샌드박스(예: Tampermonkey)입니다.vmSelfDefending방어 기능이 그에 맞게 조정됩니다. VM 난독화(또는 Parse HTML)와 난독화 도구 v6.9.0 이상이 필요합니다.bytenode- bytenode로.jsc로 컴파일될 코드용입니다. VM 난독화(또는 Parse HTML)와 난독화 도구 v6.13.0 이상이 필요합니다.
브라우저 환경과 도메인
코드가 실행되는 위치에 대한 선언은 실제 배포와 일치해야 합니다. browserEnvironment는 빌드가 실제로 어떻게 제공되는지를 기술해야 하며(Browser Environment 참고), VM Domain Lock에는 빌드를 제공하는 모든 도메인을 나열해야 합니다(VM Domain Lock 참고). 자동화 도구와 디버거는 고급 방어 기능을 작동시킬 수 있습니다. 테스트와 CI를 참고하세요.
JavaScript
함수 이름과 함수 소스 텍스트는 난독화로 바뀔 수 있습니다. .name이나 .toString()을 안정적인 애플리케이션 데이터로 사용하지 말고, 명시적인 식별자를 사용하세요. 설정상 필요한 경우 공개 전역은 계속 보일 수 있습니다.
strictMode
strictMode: null과 strictMode: false에서도 명시적인 지시문, ES 모듈, 클래스 메서드는 엄격 모드로 인식됩니다. strictMode: true는 모든 입력을 엄격 모드로 취급합니다. 최종 실행 컨텍스트에 맞추세요. 난독화 후에 번들러가 엄격 모드를 추가하면 동작이 달라질 수 있습니다.
빌드 파이프라인
최종 난독화 단계 전에 TypeScript나 JSX를 컴파일하고 애플리케이션을 번들링하세요. comment 모드가 /* javascript-obfuscator:vm */ 주석을 계속 찾을 수 있도록 그 빌드 과정 내내 주석을 유지하세요. Self Defending이나 VM Self Defending의 출력은 이후에 압축하거나 포맷하거나 달리 다시 쓰지 마세요. VM 난독화와 HTML 난독화에서는 소스 맵을 사용할 수 없습니다.
