Nén và Làm Đẹp JavaScript - Terser ngay trong trình duyệt
Nén và làm đẹp JavaScript
Rút gọn tên cục bộ tiết kiệm nhiều byte nhất, nhưng làm hỏng mã tra tên dưới dạng văn bản - trong eval, new Function, hay một framework đọc tên tham số. Hãy tắt nếu bạn dựa vào những thứ đó.
Công cụ này làm gì
Nén JavaScript không phải là xóa khoảng trắng. Làm bằng tìm-và-thay, bạn sẽ có những tệp trông ổn nhưng chạy khác đi, và khác biệt ấy chỉ lộ ra khi lên môi trường thật. Trang này chạy Terser - đúng bộ máy đứng sau bước build của phần lớn dự án - ngay trong trình duyệt của bạn.
Cách dùng
- 1 Dán JavaScript vào ô.
- 2 Chọn đích và quyết định có rút gọn tên hay không.
- 3 Bấm Nén - hoặc Làm đẹp để mở lại một tệp đã nén.
Vì sao phải phân tích chứ không tìm-và-thay
JavaScript tự đặt những dấu chấm phẩy bạn bỏ qua. Bỏ dấu xuống dòng giữa "return" và giá trị của nó, hàm sẽ bắt đầu trả về undefined - tệp vẫn hợp lệ, chỉ là nó làm chuyện khác. Cùng một ký tự, chỗ này là phép chia, chỗ kia là biểu thức chính quy. Phân biệt được chúng cần ngữ pháp chứ không phải mẫu khớp; vì thế trang này dùng một bộ phân tích thật.
Thứ thật sự nhỏ đi
Khoảng trắng và chú thích là phần nhỏ nhất. Tiết kiệm thật đến từ việc đổi tên biến cục bộ thành một chữ cái, gộp các khai báo rời thành một, tính sẵn hằng số và vứt bỏ mã không bao giờ chạy tới. Tất cả đều là thao tác trên cây - bộ nén phải biết hai cái tên trỏ về cùng một ràng buộc và giữa chúng không ai đọc nó.
Rút gọn tên cắn ở đâu
Bộ nén chỉ đổi tên được thứ nó nhìn thấy. Nó không thấy cái tên viết dưới dạng văn bản: eval("count + 1"), new Function("a", "return a"), hay một framework đọc tên tham số của hàm để quyết định tiêm gì vào. Những thứ đó vẫn đi tìm cái tên cũ và chẳng thấy gì. Đây là bản chất của ngôn ngữ chứ không phải lỗi của công cụ - vì vậy công tắc này để bạn quyết, không tự bật lặng lẽ.
Làm đẹp không trả lại tệp gốc
Làm đẹp trả lại thụt lề và dấu xuống dòng, nên tệp đã nén lại đọc được. Nhưng thứ đã bị vứt đi thì không quay lại: chú thích mất rồi, và nếu tên từng bị rút gọn thì vẫn ngắn - chẳng công cụ nào đoán được "e" từng là "errorMessage". Để gỡ lỗi một tệp trên môi trường thật, chỉ source map mới đưa bản gốc trở lại.