JS 포맷터 · 압축기
자바스크립트를 들여쓰기해 펴거나 크기를 줄입니다. 줄이기는 terser에 맡깁니다 — 미니파이는 문법을 정확히 이해해야 하는 일이라 어설프게 만들면 남의 코드를 조용히 망가뜨리고, 그런 실수는 실행해 보기 전까지 드러나지 않습니다.
붙여넣은 코드는 기기를 벗어나지 않습니다. 브라우저 안에서만 처리하고 어디에도 보내거나 저장하지 않습니다. 사내 설정 파일이나 운영 쿼리처럼 밖으로 내보내기 곤란한 것도 그래서 쓸 수 있습니다.
펴기도 terser 가 합니다
압축과 이름 바꾸기를 끄고 보기 좋게 내보내라고 하면 되므로 파서를 두 벌 들지 않았습니다. 그래서 펴기도 문법을 끝까지 읽습니다 — 괄호가 안 맞거나 문자열이 안 닫힌 코드는 어디서 막혔는지 terser 의 말과 함께 돌아오고, 주석은 하나도 잃지 않습니다. 1MB 가까운 terser 는 첫 단추를 누를 때 내려받으므로 첫 번째만 조금 더딥니다.
줄이기가 실제로 하는 일
공백만 걷어내는 것이 아닙니다. 함수 안의 지역 변수는 한 글자 이름으로 바뀌고, 닿지 않는 코드는 사라지고, 1 + 2 같은 상수 계산은 미리 접힙니다. 최상위 이름과 객체의 속성 이름은 건드리지 않습니다 — 밖에서 부르는 이름이 바뀌면 다른 파일이 깨집니다. 결과가 뜻은 같아도 원래 모양으로는 돌아가지 않는 이유가 이것입니다. 얼마나 줄었는지는 UTF-8 바이트로 세어 보여 줍니다.
왜 문법을 알아야 하나
자바스크립트는 줄바꿈이 뜻을 갖습니다. return 뒤에서 줄을 바꾸면 undefined 를 돌려주고, / 는 자리에 따라 나눗셈이기도 정규식의 시작이기도 합니다. 글자만 보고 공백을 지우면 이런 자리에서 조용히 다른 프로그램이 됩니다. 같은 이유로 자바스크립트만 받습니다 — 타입 표기가 든 TypeScript 나 JSX 는 문법 오류로 돌아오니, 먼저 컴파일한 결과를 넣으세요.
틀린 코드에서 돌아오는 것
빈 칸이거나 공백뿐이면 아무 일도 하지 않습니다. 문법이 틀리면 결과 대신 terser 가 준 말이 그대로 섭니다 — Unexpected token … 같은 영어 한 줄이고 줄·칸은 붙지 않습니다. 몇 줄 몇 칸인지 짚어 주는 것은 JSON 쪽뿐이라, 자바스크립트는 그 말에 적힌 토큰을 원본에서 찾아야 합니다. import·export 가 든 모듈 파일은 그대로 받지만 최상위 await 는 문법 오류로 돌아옵니다.
결과를 다루는 법
결과는 넣는 칸을 덮어쓰지 않고 옆에 섭니다. 잘못 골랐으면 원본이 그대로 있으니 다시 하면 되고, 결과를 넣는 칸으로 올려 보내 펴서 읽은 것을 다시 줄이는 일도 잇달아 할 수 있습니다. 줄인 결과는 한 줄입니다. 화면에서 줄을 접어 보이는 것은 읽기 위한 것이라 복사하면 다시 한 줄이 됩니다. 결과가 4,000줄을 넘으면 줄 번호를 접고 통짜로 그리는데 글과 복사는 그대로입니다.
자주 묻는 질문
왜 이것만 라이브러리를 쓰나요?
세미콜론 자동 삽입, 정규식과 나눗셈 구분, 이름 바꾸기처럼 어긋나기 쉬운 곳이 많기 때문입니다. terser는 실제로 널리 쓰이는 미니파이어이고 BSD-2-Clause라 라이선스도 깨끗합니다. 다만 1MB 가까이 되므로 이 화면에 들어왔을 때만 내려받습니다 — JSON·SQL·CSS만 쓰는 사람은 받지 않습니다.
난독화된 코드를 되돌릴 수 있나요?
보기 좋게 펴 줄 뿐 원래 이름은 되살리지 못합니다. 미니파이 과정에서 변수 이름이 한 글자로 바뀌면 그 정보는 파일에 남지 않기 때문입니다. 소스맵이 있다면 그쪽을 쓰세요.
라이선스 주석은 남나요?
남습니다. /*! 로 시작하는 주석은 지우지 않습니다. 라이선스 고지를 그렇게 적는 것이 오랜 관례이고, 지우면 남의 저작권 표시를 지우는 셈이 됩니다.
줄인 결과가 한 줄로 나오는데 맞나요?
맞습니다. 줄바꿈도 공백이라 함께 걷어냅니다. 읽어야 하면 그 결과를 다시 펴면 되고, 화면의 줄 접기는 보이는 것만 접을 뿐 복사되는 글은 한 줄입니다. 사람이 볼 파일이라면 애초에 펴기만 쓰는 편이 낫습니다.
붙여넣은 코드가 서버로 가나요?
가지 않습니다. 브라우저 안에서만 처리하고 어디에도 보내거나 저장하지 않습니다. 사내 설정 파일이나 운영 쿼리처럼 밖으로 내보내기 곤란한 것도 그래서 쓸 수 있습니다. 인터넷을 끊고도 동작합니다.