자바스크립트 파일을 압축해주는 uglifyjs 라이브러리는 꽤 유명합니다. 워낙 예전부터 유명한 자바스크립트 압축 유틸리티로 js 파일을 압축해 크기를 줄일 수 있는 방법이죠.
! uglifsjs는?
압축(Compress)으로 잘 알려져 있지만
Parcer,
Minifier,
Beautifier로서의 기능도 있습니다. 그럼 아래는 uglifyjs를 설치하고 사용하는 방법에 대하여 자세히 알아보겠습니다.
# 자바스크립트 라이브러리 uglifyjs
먼저 설치하는 방법을 알아봅니다. 간단하게 npm을 사용해 설치가 가능합니다.
npm install uglify-js -g
여기서 -g 옵션을 사용하면 글로벌로 설정되어 cli 커맨드라인 명령어가 가능하게 됩니다. 이제 node 패키지를 사용해 설치가 완료되었습니다.
! uglifyjs 사용방법 알아보기
사용 방법도 아주 간단한데요~ 먼저 가장 기본적인 방법부터 알아봅니다.
uglifyjs <파일> <옵션값>이처럼 대상파일과 옵션을 사용해 손쉽게 사용 할 수 있습니다. 선택 가능한 옵션부터 알아보죠.
--output, -o // 출력결과를 파일로 저장하기
--compress, -c // 압축하기
위 두 옵션이
가장 많이 쓰이는 옵션 중 하나입니다. 여기서
output 옵션을 사용하지 않으면 파일로 저장하지 않고 압축된 내용을 그대로 문자열로 반환합니다. 그래서 파일로 저장할 경우 꼭
--output을 사용해야하니 알아두시기 바랍니다. 아래는 그 외의 옵션들입니다.
--parse, -p // 파싱을 수행함
--mangle, -m // Mangle을 수행함; (Mangle v. 짓이기다, 훼손하다)
--beautify, -b // Beautify를 수행함
--timings // 런타임 시간을 반환
--version // 현재 버전 출력하기
# uglifyjs 예제 및 사용 방법
이제 예제 및 사용 방법을 알아봅니다. 옵션 없이 아래처럼 사용합니다.
uglifyjs test.js
@ 파일로 출력하기 --outputuglifyjs test.js --output test.min.js
or
uglifyjs test.js -o test.min.js
코드를 실행하면 test.min.js 파일이 생성되되고 저장됩니다.
! mangle 및 compress 사용하기
가장 많이 사용되는 옵션인 output과 함께 사용되는 mangle, compress 사용 방법입니다.
uglifyjs test.js -o test.min.js -c
// compress만 사용
uglifyjs test.js -o test.min.js -m
// mangle만 사용
uglifyjs test.js -o test.min.js -c -m
// compress와 mangle 동시 사용
옵션의 위치를 잘 확인하고 사용해야 합니다.
! 각각의 옵션의 출력값 보기
아래와 같은 test.js가 실제 어떻게 동작되어 결과가 나타나는지 알아봅니다.
@ test.js
!function test() {
var msg = 123;
console.log(msg);
}();
각각 알아봅니다. 먼저 옵션이 없는 경우 부터 확인해보죠.
1. 옵션 사용 없음
!function test(){var msg=123;console.log(msg)}();
; 빈 공간이 사라지고 줄바꿈 없이 제거되었습니다.
2. 압축하기 -- compress
console.log(123);
; 불필요한 함수가 사라지고 결과만 동일하도록 압축됩니다.
3. Mangle --mangle
!function o(){var n=123;console.log(n)}();
; 1번과 동시에 긴 변수명도 짧게 줄어들었군요.
4. Beautify 하기 --beautify
!function test() {
var msg = 123;
console.log(msg);
}();
; 불필요한 공백이 사라지고 이쁘게(?) 출력됩니다.
4. 런타임 확인하기 --timings
!function test(){var msg=123;console.log(msg)}();
- parse: 0.004s
- rename: 0.000s
- compress: 0.000s
- scope: 0.000s
- mangle: 0.000s
- properties: 0.000s
- output: 0.002s
- total: 0.006s
동작 시간이 각각 옵션별로 출력됩니다. 다음은 ES 6를 지원하는 방법입니다.
# es6를 지원하는 uglify-js-6
앞에 말한 것 처럼 기존 라이브러리는
es6 문법을 지원하지 않습니다. Webpack 등의 번들링 환경에 babel을 설정하지 않았다면 js 내부에 const, let 등등 es6가 사용된 경우 uglify-js에서 에러가 발생하죠.
하지만 새로운 노드 패키지인 uglify-js-es6는 es6를 지원하기 때문에 es6 문법도 사용 가능합니다. 아래는 링크입니다.
링크 바로가기 >
https://www.npmjs.com/package/uglify-js-es6이제 ES 6 역시 uglifyjs를 사용해 압축 등의 기능을 쉽게 이용할 수 있습니다.