Używam uglifyjs do minifikacji połączonego zestawu plików, który działa dobrze, ale nie jest wystarczająco dobry. Wbudowany lib używa nazw, więc klasy, funkcje i stałe są przechowywane w zmiennej przestrzeni nazw root:Mangle zagnieżdżone klasy i zmienne z 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;
})();
który minified do niezbyt minimalna wersja
(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})();
Rozumiem zeszpecić prawdopodobnie myśli ten root var jest strukturą danych, która musi być przechowywana tak jak jest i nie może być zmieniona. Czy istnieje sposób na pozwolenie na pomylenie zagnieżdżonych nazw w głównej przestrzeni nazw?
Tak, rozumiem wasze argumenty. Czy mogę coś jeszcze zrobić? – whadar
Bardzo ładna odpowiedź. – SoonDead
@Jan Developer może to zdecydować, a nie uglifyjs. Mogę skonfigurować w tym celu polecenie uglifyjs: "nie modyfikuj ciągów" lub "nie dotykaj zmiennych, które ci powiedziałem". Używałem obfuscatora i wszystko to bez problemu. –