Naprawdę spóźniłem się na imprezę tutaj, ale pomyślałem, że może to pomóc komuś, kto wciąż szuka innej odpowiedzi:
Po próbie użycia YUI Compressor byłem rozczarowany, że był on niekompatybilny z nowszymi wersjami jQuery i Prism (dwie główne biblioteki JS innych firm, których potrzebowałem do mojego projektu, które chciałem skompresować do jednego pliku). Zdecydowałem się więc na Terser , który jest rozwidleniem Uglify-JS obsługującym ES6 +. Nie byłem w stanie uruchomić go bezpośrednio przy użyciu <exec>
zadania, ale użycie metody wiersza poleceń systemu Windows działa przynajmniej dla Win 10 (nie mówiąc, że nie może działać inaczej, ale było to bardzo łatwe obejście). Nie ma potrzeby dodawania niczego więcej do zmiennej systemowej Path (ponieważ Node.JS jest zwykle dodawany podczas instalacji). Najpierw używam <concat>
zadania ANT, aby utworzyć duży, nieskompresowany plik. Użyj, <fileset>
ponieważ zachowa porządek (jeśli to ważne, w każdym razie).
<concat destfile="${js-big-file}" encoding="UTF-8" outputencoding="UTF-8" fixlastline="true">
<filelist refid="js-input-filelist"/>
</concat>
Następnie użyj tego <exec>
zadania, aby uruchomić dowolny program NPM, taki jak Terser. Strona podręcznika Apache dotycząca tego zadania wskazała, że jest to obejście systemu Windows do uruchamiania plików .bat, ale tak naprawdę pozwala na uruchomienie prawie każdej aplikacji wiersza poleceń (nawet tych, których w <exec>
tajemniczy sposób nie można znaleźć inaczej).
<exec executable="cmd">
<arg value="/c"/>
<arg value="terser"/>
<arg value="${js-big-file}" />
<arg value="-o" />
<arg value="${smaller-js-file}"/>
</exec>
Zintegrować? Jest częścią skryptu budowania ANT (wtyczka DITA Open Toolkit obsługująca między innymi niestandardowy JavaScript - nie jest to aplikacja internetowa Java jako taka, ale używanie Javy do tworzenia wyjścia HTML5), więc integracja nie była czymś więcej niż dodaniem tych zadania do nowego celu (jest więcej kodu dotyczącego ustawiania wartości domyślnych i sprawdzania parametrów wejściowych!).
Łatwe do włączenia / wyłączenia? W moim przypadku mam parametr, który przekazuję do kompilacji ANT, aby uwzględnić kompilację i minifikację pliku JS. Więc tak, osiąga ten cel tylko wtedy, gdy ustawię parametr na „Tak”. To dość łatwa rzecz do skonfigurowania w kompilacji ANT.
Przezroczysty Jak dotąd wydaje się, że nie ma to wpływu na żaden z kilku plików JS, które dołączam. Niektóre z nich są moimi własnymi (i w żadnym wypadku nie jestem ekspertem od JS), a niektóre, jak wspomniałem, są popularnymi bibliotekami JS.
Minifier Terser, ale przy użyciu tej metody możesz użyć prawie dowolnego zminimalizowania z danymi wejściowymi wiersza poleceń.
Brakuje funkcji? Terser działa tylko z JavaScriptem. Jeśli chcę zrobić to samo z moimi plikami CSS (co robię), używam YUI Compressor.
Jak to jest obecnie aktywny projekt i ma dobre wsparcie. Ponadto obecna implementacja (wywołanie jej tylko przez <exec>
cel ANT ) pozwala mi na wymianę minifier, jeśli będę musiał użyć czegoś innego w przyszłości.
Nie podoba mi się, że wymaga Node.JS. Nie ma nic przeciwko Node.JS, pamiętaj tylko, że ten konkretny projekt nie potrzebuje go inaczej. Wolałbym użyć do tego pliku Java .jar, takiego jak YUI Compressor (w razie potrzeby mogę go łatwo rozpowszechnić za pomocą wtyczki).