Tôi sử dụng uglifyjs để rút gọn một tập hợp các tệp được nối, hoạt động tốt nhưng không đủ tốt. Các lib xây dựng sử dụng không gian tên, vì vậy các lớp học, chức năng và các hằng số được lưu trữ trong một biến namespace root:Mangle lớp lồng nhau và biến với uglifyjs
(function() {
var root = { api:{}, core:{}, names:{} };
/* util.js file */
root.names.SOME_LONG_NAMED_CONST='Angel';
/* Person.js file */
root.core.Person = function(name) { this.name = name };
/* API.js with the functions we want to expose */
root.api.perform = function(param_for_api) { /* do something */ }
window.lib_name.perform = root.api.perform;
})();
mà được giảm bớt với phiên bản không-để-minimal
(function(){var a={api:{},core:{},names:{}};a.names.SOME_LONG_NAMED_CONST="Angel",a.core.Person=function(a){this.name=a},a.api.perform=function(){},window.lib_name.perform=a.api.perform})();
Tôi hiểu làm xấu đi có thể nghĩ var gốc đó là cấu trúc dữ liệu phải được giữ nguyên và không thể thay đổi được. Có cách nào để cho uglify mangle các tên lồng nhau trong không gian tên gốc?
Có, tôi hiểu bạn đối số. Tôi có thể làm gì khác không? – whadar
Câu trả lời rất hay. – SoonDead
@Jan Developer có thể quyết định điều này, chứ không phải uglifyjs. Tôi có thể cấu hình uglifyjs về điều đó: 'không xâu chuỗi', hoặc, 'không chạm vào các biến mà tôi đã nói với bạn'. Tôi đã sử dụng một obfuscator và nó đã được hoàn toàn uglifying tất cả mọi thứ mà không có một vấn đề. –