프로젝트 소개
Terser는 ES6+를 위한 JavaScript 맹글러 및 압축기 툴킷으로, 더 이상 유지 관리되지 않는 uglify-es와 ES6+를 지원하지 않는 uglify-js에 대한 유지 관리되는 대안으로 자리잡고 있습니다. uglify-es의 포크이며 uglify-es 및 uglify-js@3와 API 및 CLI 호환성을 대부분 유지합니다.
설치는 npm을 통해 이루어지며, 명령줄 사용을 위해 전역으로(`npm install terser -g`) 또는 프로그래밍 방식 사용을 위해 로컬로(`npm install terser`) 설치할 수 있습니다. CLI는 하나 이상의 입력 파일과 옵션을 인수로 받습니다. 입력 파일이 없으면 STDIN에서 읽습니다. 이중 대시로 구분하면 옵션을 입력 파일 앞에 전달할 수 있습니다.
핵심 기능은 다음과 같습니다:
- 파싱: 대체 파서로 Acorn, bare return, 단일 표현식 파싱(JSON에 유용), SpiderMonkey AST 입력을 지원합니다.
- 압축(`--compress`): 압축기를 활성화하며, 반환 값이 사용되지 않을 때 제거해도 안전한 함수를 지정하는 `pure_funcs`와 같은 옵션을 받습니다.
- 이름 맹글링(`--mangle`): 변수 이름을 바꿉니다. 이름을 보호하는 `reserved`, 최상위 스코프를 위한 `toplevel`, eval 또는 with를 사용하는 스코프를 위한 `eval`과 같은 옵션이 있습니다.
- 속성 맹글링(`--mangle-props`): 명시적으로 안전하지 않은 별도의 단계로 객체 속성 이름을 바꿉니다. 일치하는 이름으로 제한하는 `regex`, `reserved` 목록, 따옴표로 묶인 속성 이름을 예약하는 `keep_quoted`, 특수 주석으로 표시된 속성만 처리하는 `only_annotated`, 표준 전역을 포함하는 `builtins`, 문제 해결을 위해 인식 가능한 접두사/접미사를 추가하는 `debug`를 지원합니다. `--name-cache` 파일을 사용하면 여러 번의 실행에서 맹글링된 속성 매핑을 일관되게 유지할 수 있습니다.
- 포맷팅(`--format`): 라이선스와 같은 주석을 앞에 추가하는 `preamble`, `quote_style`, `wrap_iife`, `wrap_func_args` 옵션이 있습니다.
- 소스 맵(`--source-map`): 외부 맵을 생성하고, 구성된 매핑(예: CoffeeScript → 컴파일된 JS → 축소된 JS)을 위해 입력 맵을 받을 수 있으며, `base`, `content`, `filename`, `includeSources`, `root`, `url`과 같은 옵션을 지원합니다.
- 기타 CLI 플래그: 전역 정의를 위한 `--define`, ECMAScript 버전을 위한 `--ecma`, 출력을 함수로 감싸는 `--enclose`, 레거시 브라우저 호환을 위한 `--ie8` 및 `--safari10`, `--keep-classnames` 및 `--keep-fnames`, ES6 모듈을 위한 `--module`, `--toplevel`, `--wrap`, `--comments` 필터링, `--config-file`, `--timings`가 있습니다.
프로그래밍 API는 비동기 `minify(code, options)` 함수와 동기식 `minify_sync()` 대안을 제공합니다. 파일 이름을 키로 하는 객체를 전달하면 여러 파일을 한 번에 축소할 수 있습니다. 옵션에는 `ecma`, `enclose`, `parse`, `compress`, `mangle` (`properties` 하위 옵션 포함), `module`, `format`/`output`, `sourceMap`이 있습니다. `nameCache` 옵션을 사용하면 맹글링된 이름 매핑을 디스크에 저장하여 일관된 다중 파트 빌드를 유지할 수 있습니다. 축소 중 발생한 오류는 `message`, `filename`, `line`, `col`, `pos` 필드를 제공합니다.
README에는 beautification이 문서화되지 않았고 제거 중이므로 Prettier를 대신 권장하며, 모듈 번들링에는 RollupJS를 사용하여 전체 코드를 더 작게 만들 것을 권장한다고 명시되어 있습니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.