आप अपने जावा वेब अनुप्रयोगों के लिए जावास्क्रिप्ट मिनिमाइज़ेशन को कैसे स्वचालित करते हैं?


122

मुझे यह सुनने में दिलचस्पी है कि आप अपने जावा वेब ऐप्स के लिए जावास्क्रिप्ट मिनिमाइजेशन को कैसे स्वचालित करना पसंद करते हैं। यहाँ कुछ पहलू दिए गए हैं जिनमें मैं विशेष रूप से दिलचस्पी लेता हूँ:

  • यह कैसे एकीकृत करता है ? क्या यह आपके बिल्ड टूल का हिस्सा है, एक सर्वलेट फिल्टर, एक स्टैंडअलोन प्रोग्राम WAR फाइल को पोस्ट-प्रोसेसिंग करता है, या कुछ और?
  • क्या इसे सक्षम और अक्षम करना आसान है ? यह प्रयास करने के लिए बहुत अयोग्य है और एक छोटा स्क्रिप्ट को डीबग करना है, लेकिन यह डेवलपर के लिए भी उपयोगी है कि वह परीक्षण कर सके कि मीनिंग ऑफ कुछ भी नहीं तोड़ता है।
  • क्या यह पारदर्शी तरीके से काम करता है , या क्या इसका कोई साइड इफेक्ट है (इसके अलावा जो कि minification में निहित है) जो मुझे अपने दिन-प्रतिदिन के काम पर विचार करना है?
  • यह किस मिनिफायर का उपयोग करता है?
  • क्या इसमें किसी भी तरह की कोई कमी है जिनके बारे में आप सोच सकते हैं?
  • तुम्हे उसके बारे में क्या पसंद है?
  • आपको इसके बारे में क्या पसंद नहीं है?

यह ज्यादातर मेरी भविष्य की परियोजनाओं के लिए एक संदर्भ के रूप में काम करेगा (और उम्मीद है कि अन्य एसओआर इसे जानकारीपूर्ण भी पाएंगे), इसलिए सभी प्रकार के उपकरण दिलचस्प हैं।

(ध्यान दें कि यह सवाल नहीं है कि कौन सा मिनिफायर सबसे अच्छा है । हमारे पास पहले से ही बहुत सारे हैं।)


यह वास्तव में दिलचस्प लग रहा है, इसके बारे में नहीं सुना था। त्वरित खोज में मुझे मिले सभी उपकरण मैन्युअल उपकरण हैं जो एक बार चलते हैं। चींटी या मावेन के लिए प्लग हो तो अच्छा होगा। उम्मीद है कि किसी के पास एक अच्छा जवाब हो।
Jay

और ऐसा प्रतीत होता है कि किसी ने किया - dfa का उत्तर देखें: stackoverflow.com/questions/1379856/…
gustafc

जवाबों:


65

13

हम निर्माण कार्य के दौरान YUICompressor के साथ js फ़ाइलों को छोटा करने के लिए चींटी कार्य का उपयोग कर रहे हैं और एक अलग फ़ोल्डर में परिणाम डालते हैं। फिर हम उन फाइलों को वेब सर्वर पर अपलोड करते हैं। आप इस ब्लॉग में YUI + चींटी एकीकरण के लिए कुछ अच्छे उदाहरण पा सकते हैं

यहाँ एक उदाहरण है:

<target name="js.minify" depends="js.preprocess">
    <apply executable="java" parallel="false">
        <fileset dir="." includes="foo.js, bar.js"/>
        <arg line="-jar"/>
        <arg path="yuicompressor.jar"/>
        <srcfile/>
        <arg line="-o"/>
        <mapper type="glob" from="*.js" to="*-min.js"/>
        <targetfile/>
    </apply>
</target>

2
स्निपेट; अच्छा। क्या आप script srcदेव बिल्ड पर अपने रिटायरगेट करते हैं या क्या आप केवल गैर-मिनिमाइज़ की गई फ़ाइलों को संपीड़ित / js डायरेक्टरी में कॉपी करते हैं?
gustafc

उत्पादन के लिए बस public_html / js में मूल फ़ाइलों पर संपीड़ित फ़ाइलें अपलोड करें। अच्छी बात यह है कि स्थानीय और उत्पादन के बीच कोई कोडिंग या पथ परिवर्तन नहीं है, बुरी बात यह है कि आपको कुछ मैनुअल अपलोड और ओवर राइटिंग करनी होगी (मुझे यकीन है कि यह स्वचालित हो सकता है, लेकिन हमारे लिए यह इसके लायक नहीं है, अपलोड करना कुछ समय के बाद कुछ js फाइलें बहुत बड़ी नहीं होती हैं)।
सर्प

मैंने आपके कोड का उपयोग किया है, लेकिन यह मेरी परियोजना की जड़ में की गई फ़ाइल बनाता है, मैंने सेट किया है <fileset dir="${generatedScriptsDir}" includes="**/*.js"/>लेकिन यह काम नहीं करता है। मैं फ़ाइल को जनरेट करने के लिए कैसे कर सकता हूँ ${generatedScriptsDir}?
वडॉरेक्वेस्ट

टैग लगाने के लिए 'dir' विशेषता जोड़ने का प्रयास करें। सुनिश्चित करें कि '$ {
जेनरेटस्क्रिप्‍शनडिर

12

मुझे लगता है कि नौकरी के लिए सबसे अच्छा और सही उपकरण wro4j है। https://github.com/wro4j/bro4j देखें

यह आपकी ज़रूरत का हर काम करता है:

  • प्रोजेक्ट वेब रिसोर्स (js & css) को अच्छी तरह से व्यवस्थित रखें
  • मर्ज करें और उन्हें रन-टाइम (एक साधारण फ़िल्टर का उपयोग करके) या बिल्ड-टाइम (मावेन प्लगइन का उपयोग करके) में छोटा करें
  • मुक्त और खुला स्रोत: अपाचे 2.0 लाइसेंस के तहत जारी किया गया
  • कई लघुकरण उपकरण जो wro4j द्वारा समर्थित हैं: JsMin, Google क्लोजर कंप्रेसर, YUI आदि
  • उपयोग करने के लिए बहुत आसान है। सर्वलेट फ़िल्टर, सादे जावा या स्प्रिंग कॉन्फ़िगरेशन का समर्थन करता है
  • जावास्क्रिप्ट और सीएसएस मेटा फ्रेमवर्क सपोर्ट: कॉफीस्क्रिप्ट, कम, सैस आदि
  • सत्यापन: JSLint, CSSLint आदि

डिबग के साथ-साथ उत्पादन मोड में भी चला सकते हैं। बस उन सभी फाइलों को निर्दिष्ट करें जिन्हें इसे संभालना चाहिए / पूर्व-प्रक्रिया और यह बाकी काम करता है।

आप बस इस तरह मर्ज किए गए, छोटा और संकुचित संसाधन शामिल कर सकते हैं:

<script type="text/javascript" src="wro/all.js"></script>

2
वास्तव में एक निफ्टी उपकरण की तरह लगता है। अपडेट करने के लिए धन्यवाद!
gustafc

क्या यह क्लाइंट साइड में रिफ्रेशिंग को मजबूर करने के लिए रिसोर्स फाइल्स में वर्जनिंग को जोड़ता है? मुझे इस सुविधा के बारे में कोई दस्तावेज नहीं मिला।
किआंग

केवल एक चीज जो मुझे वास्तव में wro4j में याद आती है, वह है css उपसर्ग।
इनाफाल्को

क्या वेब सर्वर wroसे स्थिर सामग्री ( ऐप सर्वर पर उत्पन्न ) की सेवा करना संभव है apache?
HybrisHelp

8

मैंने Google क्लोजर कंपाइलर और याहू कंप्रेसर के लिए चींटी मैक्रोज़ लिखा है और इस फाइल को विभिन्न वेब परियोजनाओं में शामिल किया है।

<?xml version="1.0" encoding="UTF-8"?>
<!-- CSS and JS minifier. -->
<!DOCTYPE project>
<project name="minifier" basedir=".">

  <property name="gc" value="compiler-r1592.jar" />
  <property name="yc" value="yuicompressor-2.4.6.jar" />

  <!-- Compress single js with Google Closure compiler -->
  <macrodef name="gc-js">
    <attribute name="dir" />
    <attribute name="src" />
    <sequential>
      <java jar="${gc}" fork="true">
        <!--
        - - compilation_level WHITESPACE_ONLY | SIMPLE_OPTIMIZATIONS | ADVANCED_OPTIMIZATIONS
        Specifies the compilation level to use. Default: SIMPLE_OPTIMIZATIONS
        - - warning_level QUIET | DEFAULT | VERBOSE
        Specifies the warning level to use.
        -->
        <arg line="--js=@{dir}/@{src}.js" />
        <arg line="--js_output_file=@{dir}/@{src}-min-gc.js" />
      </java>
    </sequential>
  </macrodef>

  <!-- Compress single js with Yahoo compressor -->
  <macrodef name="yc-js">
    <attribute name="dir" />
    <attribute name="src" />
    <sequential>
      <java jar="${yc}" fork="true">
        <arg value="@{dir}/@{src}.js" />
        <arg line="-o" />
        <arg value="@{dir}/@{src}-min-yc.js" />
      </java>
    </sequential>
  </macrodef>

  <!-- Compress all js in directory with Yahoo compressor -->
  <macrodef name="yc-js-all">
    <attribute name="dir" />
    <sequential>
      <apply executable="java" parallel="false">
        <fileset dir="@{dir}" includes="*.js" excludes="*-min*.js" />
        <arg line="-jar" />
        <arg path="${yc}" />
        <srcfile />
        <arg line="-o" />
        <mapper type="glob" from="*.js" to="@{dir}/*-min-yc.js" />
        <targetfile />
      </apply>
    </sequential>
  </macrodef>

  <!-- Compress all css in directory with Yahoo compressor -->
  <macrodef name="yc-css-all">
    <attribute name="dir" default="${build.css.dir}" />
    <sequential>
      <apply executable="java" parallel="false">
        <fileset dir="@{dir}" includes="*.css" excludes="*-min*.css" />
        <arg line="-jar" />
        <arg path="${yc}" />
        <arg line="-v --line-break 0" />
        <srcfile />
        <arg line="-o" />
        <mapper type="glob" from="*.css" to="@{dir}/*-min.css" />
        <targetfile />
      </apply>
    </sequential>
  </macrodef>
</project>
  • एकीकरण: <import file="build-minifier.xml" />अपने build.xml में, फिर हमेशा की तरह चींटी कार्यों के लिए आमंत्रित करें:<gc-js dir="${build.js.dir}" src="prototype" /> <yc-js-all dir="${build.js.dir}" />

  • दो मिनीफायर की पसंद: Google क्लोजर कंपाइलर और याहू कंप्रेसर, आपको उन्हें मैन्युअल रूप से डाउनलोड करना चाहिए और xml फ़ाइल के पास रखना चाहिए

  • खनिज पहले से संपीड़ित फ़ाइलें छोड़ें (समाप्त हो रही हैं -min*)

  • आमतौर पर मैं स्क्रिप्ट के तीन संस्करण बनाता हूं: prototype.jsडिबगिंग के लिए असम्पीडित (जैसे ), prototype-min-gc.jsउत्पादन सर्वर के लिए क्लोजर कंपाइलर ( ) के साथ संपीड़ित, याहू के साथ संपीड़ित ( prototype-min-yc.js) समस्या निवारण के लिए क्योंकि क्लोजर कंपाइलर जोखिम भरा अनुकूलन का उपयोग करता है और कभी-कभी अमान्य संपीड़ित फ़ाइल का उत्पादन करता है और याहू कंप्रेसर अधिक सुरक्षित है

  • याहू कंप्रेसर एकल मैक्रो के साथ एक डायर में सभी फाइलों को छोटा कर सकता है, क्लोजर कंपाइलर नहीं कर सकता है


8

मैंने दो तरीके आजमाए:

  1. एक सर्वलेट फिल्टर का उपयोग कर। जब उत्पादन मोड में होता है, तो फ़िल्टर सक्रिय होता है और यह * .css या * .js जैसे URL से जुड़े किसी भी डेटा को संपीड़ित करता है
  2. maven और yuicompressor-maven-plugin का उपयोग करना ; संपीड़न सुगंधित टेंटम है, ( उत्पादन युद्ध को इकट्ठा करते समय )

बेशक बाद वाला समाधान बेहतर है क्योंकि यह रनटाइम पर संसाधनों का उपभोग नहीं करता है (मेरा वेबप गूगल एप्लिकेशन इंजन का उपयोग कर रहा है) और यह आपके एप्लिकेशन कोड को जटिल नहीं करता है। तो इस उत्तरवर्ती मामले को निम्नलिखित उत्तरों में मानें:

यह कैसे एकीकृत करता है? क्या यह आपके बिल्ड टूल का हिस्सा है, एक सर्वलेट फिल्टर, एक स्टैंडअलोन प्रोग्राम WAR फाइल को पोस्ट-प्रोसेसिंग करता है, या कुछ और?

मावेन का उपयोग करना

क्या इसे सक्षम और अक्षम करना आसान है? यह प्रयास करने के लिए बहुत अयोग्य है और एक छोटा स्क्रिप्ट को डीबग करना है, लेकिन यह डेवलपर के लिए भी उपयोगी है कि वह परीक्षण कर सके कि मीनिंग ऑफ कुछ भी नहीं तोड़ता है।

आप इसे केवल तब सक्रिय करते हैं जब अंतिम युद्ध को असेम्बली करते हैं; विकास मोड में आप अपने संसाधनों का असम्पीडित संस्करण देखते हैं

क्या यह पारदर्शी तरीके से काम करता है, या क्या इसका कोई साइड इफेक्ट है (इसके अलावा जो कि minification में निहित है) जो मुझे अपने दिन-प्रतिदिन के काम पर विचार करना है?

पूर्ण रूप से

यह किस मिनिफायर का उपयोग करता है?

YUI कंप्रेसर

क्या इसमें ऐसी विशेषताओं का अभाव है, जिनके बारे में आप सोच सकते हैं?

नहीं, यह बहुत पूर्ण और उपयोग में आसान है

तुम्हे उसके बारे में क्या पसंद है?

यह मेरे पसंदीदा उपकरण (मावेन) के साथ एकीकृत है और प्लगइन केंद्रीय भंडार (एक अच्छा मावेन नागरिक) में है


मावेन प्लगइन - अच्छा। बहुत बुरा मेरे वर्तमान परियोजनाओं सभी चींटी का उपयोग :)
gustafc

आप YUI चींटी टास्क का उपयोग करके "प्रोडक्शन वॉर फाइल" बनाने वाले लक्ष्य को बना सकते हैं
dfa

4

मुझे लगता है कि आपको ग्रैन्यूल टैग के लिए एक संपीड़न पुस्तकालय की आवश्यकता है।

http://code.google.com/p/granule/

यह gzip और g द्वारा लिपटी हुई javascripts को मिलाता है: विभिन्न तरीकों का उपयोग करके संक्षिप्त नाम, साथ ही साथ Ant कार्य भी है

कोड नमूना है:

<छ: संपीड़ित>
  <script type = "text / javascript" src = "common.js" />
  <script type = "text / javascript" src = "close / goog / base.js" />
  <Script>
       goog.require ( 'goog.dom');
       goog.require ( 'goog.date');
       goog.require ( 'goog.ui.DatePicker');
  </ Script>
  <script type = "text / javascript">
      var dp = new goog.ui.DatePicker ();
      dp.render (document.getElementById ( 'datepicker'));
  </ Script>
</ छ: संपीड़ित>
...


हाँ, यह बहुत ही अच्छा लग रहा है।
gustafc

3

मुझे बहुत आश्चर्य हुआ कि किसी ने भी JAWR - https://jawr.github.io का उल्लेख नहीं किया

यह बहुत परिपक्व है और सभी मानक सुविधाओं का समर्थन करता है जो अपेक्षित हैं, और थोड़ा और अधिक। यह ओपी के उत्कृष्ट मानदंडों के खिलाफ है।

यह कैसे एकीकृत करता है? क्या यह आपके बिल्ड टूल का हिस्सा है, एक सर्वलेट फिल्टर, एक स्टैंडअलोन प्रोग्राम WAR फाइल को पोस्ट-प्रोसेसिंग करता है, या कुछ और?

इसने मूल रूप से एप्लिकेशन स्टार्टअप पर प्रसंस्करण / भारी-भार उठाया और सर्विंग एक सर्वलेट पर आधारित था । 3.x से शुरू करते हुए उन्होंने बिल्ड समय पर एकीकृत करने के लिए समर्थन जोड़ा ।

प्रसंस्कृत संसाधनों को आयात करने के लिए एक कस्टम JSP टैग लाइब्रेरी के माध्यम से JSP और फेसलेट के लिए सहायता प्रदान की जाती है। इसके अलावा, एक JS रिसोर्स लोडर लागू किया गया है जो स्थिर HTML पृष्ठों से संसाधनों को लोड करने का समर्थन करता है ।

क्या इसे सक्षम और अक्षम करना आसान है? यह प्रयास करने के लिए बहुत अयोग्य है और एक छोटा स्क्रिप्ट को डीबग करना है, लेकिन यह डेवलपर के लिए भी उपयोगी है कि वह परीक्षण कर सके कि मीनिंग ऑफ कुछ भी नहीं तोड़ता है।

debug=onएप्लिकेशन स्टार्टअप से पहले उपयोग करने के लिए एक विकल्प उपलब्ध है, और एक कस्टम GETपैरामीटर उत्पादन में व्यक्तिगत अनुरोधों पर निर्दिष्ट किया जा सकता है, डिबग मोड को चुनिंदा समय के लिए रनटाइम पर टॉगल करने के लिए।

यह किस मिनिफायर का उपयोग करता है?

JS के लिए यह YUI कंप्रेसर और JSMin को सपोर्ट करता है, CSS के लिए मुझे यकीन नहीं है।

क्या इसमें ऐसी विशेषताओं का अभाव है, जिनके बारे में आप सोच सकते हैं?

SASSसमर्थन का ख्याल आता है। उस ने कहा, यह समर्थन करता है LESS


2

हमारी परियोजना ने इसे कई तरीकों से संभाला है लेकिन हमने अपने विभिन्न पुनरावृत्तियों के माध्यम से YUI कंप्रेसर का उपयोग जारी रखा है ।

पहली बार हमारे पास एक सर्वलेट था जो जावास्क्रिप्ट के लिए संपीड़न को पहली बार संभालता था कि विशेष फ़ाइल तक पहुँचा गया था; यह तब कैश किया गया था। हमारे पास पहले से ही कस्टम प्रॉपर्टी फ़ाइलों को संभालने के लिए एक सिस्टम था, इसलिए हमने जिस कॉन्फ़िगरेशन में हम काम कर रहे थे, उसके आधार पर कंप्रेसर को सक्षम या अक्षम करने के लिए हमने अपनी कॉन्फ़िगरेशन फ़ाइलों को अपडेट किया।

अब विकास वातावरण डीबगिंग उद्देश्यों के लिए संपीड़ित जावास्क्रिप्ट का उपयोग कभी नहीं करते हैं। इसके बजाय हम अपने निर्माण की प्रक्रिया में संपीड़न को संभालते हैं जब हमारे आवेदन को एक डब्ल्यूएआर फ़ाइल में निर्यात करते हैं।

हमारे ग्राहक ने संपीड़न के बारे में कभी चिंता नहीं जताई है और जब तक वे जावास्क्रिप्ट को डीबग करने का निर्णय नहीं लेते हैं, तब तक डेवलपर्स इसे नोटिस नहीं करते हैं। तो मैं कहूंगा कि यह न्यूनतम के साथ पारदर्शी है, यदि कोई है, तो पक्ष प्रभावित करता है।


आप अपनी निर्माण प्रक्रिया से YUI कंप्रेसर का उपयोग कैसे करते हैं? मावेन प्लगइन या कुछ और?
gustafc

1
क्षमा करें, हम वर्तमान में चींटी का उपयोग करते हैं। यहाँ चींटी टास्क के लिए एक उपयोगी लिंक है: blog.gomilko.com/2007/11/29/yui-compression-tool-as-ant-task
doomspork

1

इसने मेरे लिए काम किया: https://bitbucket.org/m6_russell_francis/yui-compressor-ant-task/wiki/Home

<!-- minimize all static *.css & *.js content -->
<target name="static-content-minify">

    <taskdef name="yuicompressor"
             classname="com.metrosix.yuicompressor.anttask.YuiCompressorTask">
        <classpath>
            <pathelement location="${jar.yui.compressor}"/>
            <pathelement location="${jar.yui.anttask.compressor}" />
        </classpath>
    </taskdef>

    <yuicompressor todir="${build.static.content.min}" charset="utf-8" 
        preserveallsemicolons="true" munge="true" >
        <fileset dir="${src.static.content}">
            <include name="**/*.css"/>
            <include name="**/*.js"/>
        </fileset>
    </yuicompressor>
</target>

मैं search.maven.org से $ {jar.yui.compressor} मिला: search.maven.org/...
रिवर्स टार्जन

1

मैं वेब परिसंपत्तियों के प्रबंधन के लिए एक रूपरेखा लिख ​​रहा हूं, जिसे हम्प्टी कहा जाता है । यह WebJars और ServiceLoaders का उपयोग करके jawr या wro4j की तुलना में अधिक सरल और आधुनिक होना है।

यह कैसे एकीकृत करता है? क्या यह आपके बिल्ड टूल का हिस्सा है, एक सर्वलेट फिल्टर, एक स्टैंडअलोन प्रोग्राम WAR फाइल को पोस्ट-प्रोसेसिंग करता है, या कुछ और?

विकास में, एक सर्वलेट आवश्यक संपत्ति को संसाधित करता है। फिर संपत्ति को उत्पादन से पहले संकलित किया जाएगा और एक सार्वजनिक फ़ोल्डर में रखा जाएगा, ताकि उपयोग किए जाने वाले एकमात्र भाग को HTML में शामिल किया जाए।

क्या इसे सक्षम और अक्षम करना आसान है? यह प्रयास करने के लिए बहुत अयोग्य है और एक छोटा स्क्रिप्ट को डीबग करना है, लेकिन यह डेवलपर के लिए भी उपयोगी है कि वह परीक्षण कर सके कि मीनिंग ऑफ कुछ भी नहीं तोड़ता है।

यह विकास और उत्पादन मोड के बीच स्विच करके किया जाएगा।

क्या यह पारदर्शी तरीके से काम करता है, या क्या इसका कोई साइड इफेक्ट है (इसके अलावा जो कि minification में निहित है) जो मुझे अपने दिन-प्रतिदिन के काम पर विचार करना है?

मेरा मानना ​​है कि यह पारदर्शी है, लेकिन WebJars के उपयोग का दृढ़ता से समर्थन करता है।

यह किस मिनिफायर का उपयोग करता है?

जो भी आप अपने classpath उपयोग करता है पर एक प्लगइन। वर्तमान में Google क्लोजर कंपाइलर के लिए एक प्लगइन लिखने पर विचार कर रहा है।

क्या इसमें ऐसी विशेषताओं का अभाव है, जिनके बारे में आप सोच सकते हैं?

अभी भी पूर्व-रिलीज़, हालांकि मैं इसे उत्पादन में उपयोग कर रहा हूं। मावेन प्लगइन को अभी भी बहुत काम करने की आवश्यकता है।

तुम्हे उसके बारे में क्या पसंद है?

सिर्फ रूपरेखा को कॉन्फ़िगर करने के लिए एक निर्भरता जोड़ने की सादगी

आपको इसके बारे में क्या पसंद नहीं है?

यह मेरा बच्चा है, मुझे यह सब पसंद है;)


1

यहां पार्टी के लिए वास्तव में देर हो चुकी है, लेकिन यह पता लगाने में मदद मिल सकती है कि कोई व्यक्ति अभी भी एक अलग उत्तर की तलाश कर रहा है:

YUI कंप्रेसर का उपयोग करने की कोशिश करने के बाद, मुझे निराशा हुई कि यह jQuery और प्रिज्म के हाल के संस्करणों के साथ असंगत था (दो मुख्य 3 पार्टी जेएस लाइब्रेरी मुझे अपनी परियोजना के लिए आवश्यक थी जिसे मैं एक एकल फ़ाइल में संकुचित करना चाहता था)। इसलिए मैं उपयोग करने का फैसला terser , जो बदसूरत करना-जे एस का एक कांटा का समर्थन करता है कि ES6 + है। मैं इसे सीधे <exec>कार्य का उपयोग करने के लिए चलाने में सक्षम नहीं था , लेकिन विन 10 के लिए विंडोज कमांड लाइन विधि का उपयोग करता है, कम से कम (यह नहीं कह सकता कि यह अन्यथा काम नहीं कर सकता है, लेकिन यह बहुत आसान काम था)। पथ सिस्टम वैरिएबल में कुछ और जोड़ने की आवश्यकता नहीं है (जैसा कि Node.JS आमतौर पर स्थापना के दौरान जोड़ा जाता है)। मैं पहली बार <concat>एक बड़ी, असम्पीडित फ़ाइल बनाने के लिए ANT कार्य का उपयोग करता हूँ । इसका उपयोग करें <fileset>क्योंकि यह आदेश को संरक्षित करेगा (यदि यह महत्वपूर्ण है, वैसे भी)।

<concat destfile="${js-big-file}" encoding="UTF-8" outputencoding="UTF-8" fixlastline="true">
   <filelist refid="js-input-filelist"/>
</concat>

फिर <exec>किसी भी NPM प्रोग्राम को चलाने के लिए टास्क का उपयोग करें , जैसे कि Terser। इस कार्य पर अपाचे मैनुअल पृष्ठ संकेत दिया इस Windows फ़ाइलों .bat चलाने के लिए समाधान नहीं है, लेकिन यह वास्तव में आप किसी भी कमांड लाइन आवेदन (यहां तक कि उन है कि के बारे में बस चलाने के लिए अनुमति देता है <exec>रहस्यमय तरीके से अन्यथा नहीं मिल सकता है)।

<exec executable="cmd">
   <arg value="/c"/>
   <arg value="terser"/>
   <arg value="${js-big-file}" />
   <arg value="-o" />
   <arg value="${smaller-js-file}"/>  
</exec>

एकीकृत? यह एक ANT बिल्ड स्क्रिप्ट का हिस्सा है (अन्य बातों के अलावा, कस्टम जावास्क्रिप्ट का समर्थन करने के लिए एक DITA ओपन टूलकिट प्लगइन - एक जावा वेब एप्लिकेशन नहीं, प्रति se, लेकिन HTML5 आउटपुट का निर्माण करने के लिए जावा का उपयोग करना), इसलिए एकीकरण उन जोड़ने से ज्यादा नहीं था। एक नए लक्ष्य के लिए कार्य (चूक को सेट करने और इनपुट मापदंडों की जांच करने के बारे में अधिक कोड है!)।

सक्षम / अक्षम करने में आसान? मेरे मामले में, मेरे पास एक पैरामीटर है जो मैं एएनएसटी बिल्ड में पास करता हूं, जिसमें जेएस फाइल को बनाना और उसे छोटा करना शामिल है। इसलिए, यह केवल इस लक्ष्य को पूरा करता है यदि मैं परम को 'हां' में सेट करता हूं। कि एक ANT बिल्ड में स्थापित करने के लिए एक बहुत आसान बात है।

पारदर्शी अब तक, यह कई जेएस फाइलों में से किसी पर कोई प्रभाव नहीं पड़ता है, जिसमें मैं भी शामिल हूं। उनमें से कुछ मेरे अपने हैं (और मैं किसी भी तरह से जेएस विशेषज्ञ नहीं हूं) और कुछ हैं, जैसा कि मैंने उल्लेख किया है, सामान्य जेएस लाइब्रेरी।

न्यूनतम टसर, लेकिन आप इस विधि के साथ कमांड लाइन इनपुट के साथ किसी भी प्रकार का उपयोग कर सकते हैं।

अभाव की विशेषताएं? Terser केवल जावास्क्रिप्ट के साथ काम करता है। अगर मैं अपनी CSS फाइलों (जो मैं करता हूं) के लिए भी यही करना चाहता हूं, मैं YUI कंप्रेसर का उपयोग करता हूं।

जैसे कि यह वर्तमान में सक्रिय परियोजना है और इसमें अच्छा समर्थन है। साथ ही, वर्तमान कार्यान्वयन (केवल इसे एएनटी <exec>लक्ष्य के माध्यम से बुला रहा है ) मुझे मिनिफायरों को स्वैप करने की अनुमति देता है मुझे सड़क के नीचे कुछ और उपयोग करने की आवश्यकता होनी चाहिए।

पसंद नहीं है कि यह Node.JS की आवश्यकता है Node.JS के खिलाफ कुछ भी नहीं, तुम मन, बस इतना है कि इस विशेष परियोजना अन्यथा इसकी जरूरत नहीं है। मैं इसके लिए YUI कंप्रेसर की तरह एक जावा .jar फ़ाइल का उपयोग करना पसंद करूँगा (मैं आसानी से वितरित कर सकता हूं कि मुझे प्लगइन की आवश्यकता है)।


स्वर्गीयों का स्वागत है, भी! मैं मानता हूँ कि यह दो अलग प्रोग्रामिंग वातावरण (जावा + नोड) पर निर्भर एक परियोजना के लिए परेशान है। फिर भी, यह बहुत ही आश्चर्यजनक है कि अधिकांश जावास्क्रिप्ट काम नोड समुदाय में होता है, इसलिए इसके बारे में बहुत कुछ नहीं करना है, और लगता है कि इन दिनों बहुत कुछ गति हो गई है। आपके योगदान के लिए धन्यवाद!
gustafc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.