আপনি কীভাবে আপনার জাভা ওয়েব অ্যাপ্লিকেশনগুলির জন্য জাভাস্ক্রিপ্ট মিনিফিকেশন স্বয়ংক্রিয় করবেন?


122

আপনি কীভাবে আপনার জাভা ওয়েব অ্যাপ্লিকেশনগুলির জন্য জাভাস্ক্রিপ্ট মিনিফিকেশন স্বয়ংক্রিয় করতে পছন্দ করেন তা শুনতে আগ্রহী। আমি বিশেষভাবে আগ্রহী এমন কয়েকটি দিক এখানে দেওয়া হল:

  • এটি কীভাবে সংহত হয়? এটি কি আপনার বিল্ড সরঞ্জাম, একটি সার্লেট ফিল্টার, ওয়ার স্টোর পোস্ট-প্রসেসিং একক কর্মসূচি, বা অন্য কিছু?
  • এটি সক্ষম এবং অক্ষম করা কি সহজ ? একটি মিনিফাইড স্ক্রিপ্ট চেষ্টা করে এবং এটি ডিবাগ করা খুব অস্বাভাবিক, তবে এটি কোনও বিকাশকারীকে পরীক্ষা করতে সক্ষম হয় যে মিনিফিকেশন কোনও কিছু ভঙ্গ করে না।
  • এটি কি স্বচ্ছতার সাথে কাজ করে , বা এর কোনও পার্শ্ব প্রতিক্রিয়া রয়েছে (মিনিফিকেশনের অন্তর্নিহিত বাদে) যা আমাকে আমার প্রতিদিনের কাজ বিবেচনা করতে হবে?
  • এটি কোন মিনিফায়ার ব্যবহার করে?
  • এটি ভাবতে পারে এমন কোনও বৈশিষ্ট্যের কি অভাব রয়েছে ?
  • এ ব্যাপারে আপনি কি পছন্দ করেন?
  • কি না আপনি এটি সম্পর্কে ভালো লাগে?

এটি বেশিরভাগ ক্ষেত্রে আমার ভবিষ্যতের প্রকল্পগুলির জন্য একটি রেফারেন্স হিসাবে পরিবেশন করবে (এবং আশা করা যায় যে অন্যান্য এসওয়ারগুলি এটিও তথ্যবহুল মনে করবে), সুতরাং সমস্ত ধরণের সরঞ্জাম আকর্ষণীয়।

(দ্রষ্টব্য যে কোন মিনিফায়ার সবচেয়ে ভাল তা সম্পর্কে এটি কোনও প্রশ্ন নয় already ইতিমধ্যে আমাদের কাছে ইতিমধ্যে প্রচুর পরিমাণ রয়েছে))


এটি সত্যিই আকর্ষণীয় দেখায়, এটি শুনেনি। দ্রুত অনুসন্ধানে আমি যে সমস্ত সরঞ্জাম পেয়েছি সেগুলি হ'ল ম্যানুয়াল সরঞ্জামগুলি যা একবারে চালিত হয়। পিঁপড়া বা মাভেনের জন্য যদি কোনও প্লাগ ইন থাকে তবে এটি ভাল be আশা করি কারও ভালো উত্তর এসেছে।
জে

এবং এটা মনে হচ্ছে, কেউ হয়নি - চেক DFA এর উত্তর: stackoverflow.com/questions/1379856/...
gustafc

উত্তর:


65

এই মন্তব্যের সময় হিসাবে মিনিফাইভেন এবং ম্যাভেন ইউই সংক্ষেপক আমার জন্য ইএস 6 বৈশিষ্ট্যগুলি নিয়ে ভাল খেলেনি
ডিপিএম

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ডেভ বিল্ডিংগুলিতে পুনরুদ্ধার করেন না আপনি কেবল সং-সংযুক্ত / জেএস ডিরেক্টরিতে নন-মিনিফাইড ফাইলগুলি অনুলিপি করছেন?
gustafc

কেবলমাত্র উত্পাদনের জন্য সর্বজনীন_এইচটিএমএল / জেএসগুলিতে সংকুচিত ফাইলগুলি আপলোড করুন। ভাল জিনিস হ'ল স্থানীয় এবং উত্পাদনের মধ্যে কোনও কোডিং বা পথের পরিবর্তন নেই, খারাপ জিনিসটি হ'ল আপনাকে কিছু ম্যানুয়াল আপলোড এবং ওভাররাইটিং করতে হবে (আমি নিশ্চিত এটি স্বয়ংক্রিয় করা যেতে পারে তবে আমাদের জন্য এটি মূল্যবান নয়, আপলোড হচ্ছে) কয়েকটি জেএস ফাইল একবারে একবারে ডিল করা খুব বড় নয়)।
সার্জ 4'09

আমি আপনার কোড ব্যবহার করেছি তবে এটি আমার প্রকল্পের মূলটিতে মিনিডাইফড ফাইল তৈরি করে, আমি সেট করেছিলাম <fileset dir="${generatedScriptsDir}" includes="**/*.js"/>তবে এটি কার্যকর হয় না। আমি কীভাবে ফাইলটি তৈরি করতে পারি ${generatedScriptsDir}?
ভাদোরকোয়েস্ট

'প্রয়োগ' ট্যাগে 'দির' বৈশিষ্ট্য যুক্ত করার চেষ্টা করুন। নিশ্চিত করুন যে '{{
উত্সাহিত স্ক্রিপ্টসডির

12

আমি মনে করি কাজের জন্য সবচেয়ে ভাল এবং ডান টুল অন্যতম wro4j পরীক্ষা করে দেখুন https://github.com/wro4j/wro4j

এটি আপনার প্রয়োজনীয় সমস্ত কিছু করে:

  • প্রকল্প ওয়েব সংস্থান (জেএসএস এবং সিএসএস) সুসংহত রাখুন
  • মার্চ এবং এটিকে রান-টাইমে (একটি সাধারণ ফিল্টার ব্যবহার করে) বা বিল্ড-টাইম (ম্যাগেন প্লাগইন ব্যবহার করে) মাইনাইফ করুন
  • নিখরচায় ও মুক্ত উত্স: অ্যাপাচি ২.০ লাইসেন্সের অধীনে প্রকাশিত
  • Wro4j দ্বারা সমর্থিত বেশ কয়েকটি মিনিফিকেশন সরঞ্জাম: জেএসমিন, গুগল ক্লোজার সংক্ষেপক, ওয়াইউআই ইত্যাদি
  • ব্যবহার করা খুব সহজ। সার্ভলেট ফিল্টার, সমতল জাভা বা স্প্রিং কনফিগারেশন সমর্থন করে
  • জাভাস্ক্রিপ্ট এবং সিএসএস মেটা ফ্রেমওয়ার্ক সমর্থন: কফিস্ক্রিপ্ট, কম, স্যাস ইত্যাদি
  • বৈধতা: জেএসলিন্ট, সিএসএসলিন্ট ইত্যাদি

প্রোডাকশন মোডের পাশাপাশি ডিবাগেও চলতে পারে। প্রসেসটি হ্যান্ডল করা / প্রসেস করা উচিত সমস্ত ফাইল সুনির্দিষ্টভাবে উল্লেখ করুন এবং এটি বাকীটি করে।

আপনি কেবল মার্জড, মিনিফায়েড এবং সংকোচিত সংস্থানগুলি এর মধ্যে অন্তর্ভুক্ত করতে পারেন:

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

2
সত্যই একটি নিফটি সরঞ্জাম মত মনে হচ্ছে। আপডেট করার জন্য ধন্যবাদ!
gustafc

এটি ক্লায়েন্ট পক্ষের মধ্যে রিফ্রেশ জোর করতে উত্স ফাইলগুলিতে সংস্করণ যুক্ত করে? আমি এই বৈশিষ্ট্য সম্পর্কে কোনও ডকুমেন্টেশন খুঁজে পাইনি।
কিয়াং

Wro4j এ আমি কেবল একমাত্র জিনিস মিস করছি তা হ'ল CSS উপসর্গ।
ইনফলকও

ওয়েব সার্ভার wroথেকে স্থির সামগ্রী ( অ্যাপ সার্ভারের দ্বারা উত্পাদিত ) সরবরাহ করা কি সম্ভব apache?
হাইব্রিহেল্প

8

আমি গুগল ক্লোজার সংকলক এবং ইয়াহু সংকোচকের জন্য পিঁপড়া ম্যাক্রোগুলি লিখেছি এবং এই ফাইলটি বিভিন্ন ওয়েব প্রকল্পে অন্তর্ভুক্ত করেছি।

<?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" />আপনার বিল্ড.এক্সএমএল এ, তারপরে স্বাভাবিক পিঁপড়া কাজগুলি হিসাবে অনুরোধ করুন:<gc-js dir="${build.js.dir}" src="prototype" /> <yc-js-all dir="${build.js.dir}" />

  • দুটি মিনিফায়ারের পছন্দ: গুগল ক্লোজার সংকলক এবং ইয়াহু সংক্ষেপক, আপনাকে সেগুলি ম্যানুয়ালি ডাউনলোড করতে হবে এবং এক্সএমএল ফাইলের কাছে রাখা উচিত

  • মিনিফায়ার্স ইতিমধ্যে সংক্ষেপিত ফাইলগুলি এড়িয়ে যান (এর সাথে শেষ হচ্ছে -min*)

  • সাধারণত আমি স্ক্রিপ্টের তিনটি সংস্করণ তৈরি করি: prototype.jsডিবাগিংয়ের জন্য কমপ্রেসড (উদাহরণস্বরূপ ), prototype-min-gc.jsপ্রোডাকশন সার্ভারের জন্য ক্লোজার সংকলক ( ) সংকুচিত, prototype-min-yc.jsসমস্যা সমাধানের জন্য ইয়াহু ( ) দিয়ে সংকুচিত কারণ ক্লোজার সংকলক ঝুঁকিপূর্ণ অপ্টিমাইজেশন ব্যবহার করে এবং কখনও কখনও অবৈধ সংকোচিত ফাইল তৈরি করে এবং ইয়াহু কমপ্রেসর আরও নিরাপদ থাকে

  • ইয়াহু সংকোচকারী একক ম্যাক্রো দিয়ে একটি ডায়ারে সমস্ত ফাইল মাইনাইফ করতে পারে, বন্ধ সংকলকটি পারে না


8

আমি দুটি উপায় চেষ্টা করেছি:

  1. একটি সার্লেট ফিল্টার ব্যবহার করে। উত্পাদন মোডে থাকাকালীন, ফিল্টারটি সক্রিয় হয় এবং এটি * .css বা * .js এর মতো ইউআরএল দ্বারা আবদ্ধ কোনও ডেটা সংকুচিত করে
  2. ম্যাভেন এবং ইউইকোম্প্রেসর-মাভেন-প্লাগইন ব্যবহার করে ; সংক্ষেপণ আনফা-ট্যান্টাম সুগন্ধযুক্ত, (যখন উত্পাদন যুদ্ধ একত্রিত করা হয় )

অবশ্যই পরবর্তী সমাধানটি ভাল কারণ এটি রানটাইমের সময় সংস্থান গ্রহণ করে না (আমার ওয়েব অ্যাপ্লিকেশন গুগল অ্যাপ ইঞ্জিন ব্যবহার করছে) এবং এটি আপনার অ্যাপ্লিকেশন কোডটিকে জটিল করে না। সুতরাং নিম্নলিখিত উত্তরগুলিতে এই পরবর্তী ঘটনাটি ধরে নিন:

এটি কীভাবে সংহত হয়? এটি কি আপনার বিল্ড সরঞ্জাম, একটি সার্লেট ফিল্টার, ওয়ার স্টোর পোস্ট-প্রসেসিং একক কর্মসূচি, বা অন্য কিছু?

মাভেন ব্যবহার

এটি সক্ষম এবং অক্ষম করা কি সহজ? একটি মিনিফাইড স্ক্রিপ্ট চেষ্টা করে এবং এটি ডিবাগ করা খুব অস্বাভাবিক, তবে এটি কোনও বিকাশকারীকে পরীক্ষা করতে সক্ষম হয় যে মিনিফিকেশনটি কোনও কিছু ভঙ্গ করে না।

আপনি কেবলমাত্র চূড়ান্ত যুদ্ধের সমাবেশের সময় এটি সক্রিয় করুন; বিকাশ মোডে আপনি আপনার সংস্থানগুলির সঙ্কুচিত সংস্করণ দেখতে পান

এটি কি স্বচ্ছতার সাথে কাজ করে, বা এর কোনও পার্শ্ব প্রতিক্রিয়া রয়েছে (মিনিফিকেশনের অন্তর্নিহিত বাদে) যা আমাকে আমার প্রতিদিনের কাজ বিবেচনা করতে হবে?

একেবারে

এটি কোন মিনিফায়ার ব্যবহার করে?

YUI সংক্ষেপক

এটি ভাবতে পারে এমন কোনও বৈশিষ্ট্যের কি অভাব রয়েছে?

না, এটি খুব সম্পূর্ণ এবং সহজেই ব্যবহারযোগ্য

এ ব্যাপারে আপনি কি পছন্দ করেন?

এটি আমার প্রিয় সরঞ্জাম (মভেন) এর সাথে একীভূত হয়েছে এবং প্লাগইনটি কেন্দ্রীয় ভাণ্ডারে রয়েছে (একটি ভাল মভেন নাগরিক)


মাভেন প্লাগইন - দুর্দান্ত। খুব খারাপ আমার বর্তমান প্রকল্পগুলি সমস্ত
পিঁপড়

আপনি একটি লক্ষ্য তৈরি করতে পারেন যা YUI পিঁপড়া টাস্কটি ব্যবহার করে "উত্পাদন যুদ্ধের ফাইল" তৈরি করে
ডিএফএ

4

আমি মনে করি আপনার একটি সংক্ষেপণ গ্রন্থাগার প্রয়োজন, উদাহরণস্বরূপ গ্রানুল ট্যাগ।

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

এটি gzip এবং জাভা স্ক্রিপ্টগুলি একত্রিত করে g দ্বারা আবৃত: বিভিন্ন পদ্ধতি ব্যবহার করে কম্প্রেস ট্যাগ, এছাড়াও পিপীলিকার কাজও রয়েছে

কোড নমুনা হ'ল:

<ছ: কম্প্রেস>
  <স্ক্রিপ্ট টাইপ = "পাঠ্য / জাভাস্ক্রিপ্ট" src = "সাধারণ.js" />
  <স্ক্রিপ্ট টাইপ = "পাঠ্য / জাভাস্ক্রিপ্ট" src = "ক্লোজার / গুগ / বেস.জেএস" />
  <স্ক্রিপ্ট>
       goog.require ( 'goog.dom');
       goog.require ( 'goog.date');
       goog.require ( 'goog.ui.DatePicker');
  </ স্ক্রিপ্ট>
  <স্ক্রিপ্ট টাইপ = "পাঠ্য / জাভাস্ক্রিপ্ট">
      var dp = new goog.ui.DatePicker ();
      dp.render (document.getElementById ( 'datepicker'));
  </ স্ক্রিপ্ট>
</ ছ: কম্প্রেস>
...


হ্যাঁ, দেখতে বেশ নিফটি।
gustafc

3

আমি সত্যিই আশ্চর্য হয়েছি কেউ জেএডব্লিউআর - https://jawr.github.io উল্লেখ করেনি

এটি বেশ পরিণত এবং এটি সমস্ত স্ট্যান্ডার্ড বৈশিষ্ট্য সমর্থন করে যা প্রত্যাশিত হতে হবে এবং আরও কিছুটা। ওপির দুর্দান্ত মানদণ্ডের বিপরীতে এটি কীভাবে ধারণ করে তা এখানে।

এটি কীভাবে সংহত হয়? এটি কি আপনার বিল্ড সরঞ্জাম, একটি সার্লেট ফিল্টার, ওয়ার স্টোর পোস্ট-প্রসেসিং একক কর্মসূচি, বা অন্য কিছু?

এটি প্রাথমিকভাবে অ্যাপ্লিকেশন প্রারম্ভকালে প্রসেসিং / ভারী-উত্তোলনটি করেছিল এবং সার্ভিংয়ের উপর ভিত্তি করে পরিবেশন করা হয়েছিল । 3.x দিয়ে শুরু করে তারা বিল্ড টাইমকে সংহত করার জন্য সমর্থন যোগ করেছিল ।

প্রক্রিয়াজাত সংস্থানগুলি আমদানি করার জন্য কাস্টম জেএসপি ট্যাগ লাইব্রেরির মাধ্যমে জেএসপি এবং ফেসলেটগুলির জন্য সহায়তা সরবরাহ করা হয়। এছাড়াও, একটি জেএস রিসোর্স লোডার প্রয়োগ করা হয় যা স্থির এইচটিএমএল পৃষ্ঠাগুলি থেকে সংস্থানগুলি লোড করতে সহায়তা করে

এটি সক্ষম এবং অক্ষম করা কি সহজ? একটি মিনিফাইড স্ক্রিপ্ট চেষ্টা করে এবং এটি ডিবাগ করা খুব অস্বাভাবিক, তবে এটি কোনও বিকাশকারীকে পরীক্ষা করতে সক্ষম হয় যে মিনিফিকেশন কোনও কিছু ভঙ্গ করে না।

debug=onঅ্যাপ্লিকেশন শুরুর আগে ব্যবহারের জন্য একটি বিকল্প উপলব্ধ এবং GETঅনুরোধের জন্য রানটাইমে নির্বাচিতভাবে ডিবাগ মোড টগল করতে উত্পাদন স্বতন্ত্র অনুরোধে একটি কাস্টম প্যারামিটার নির্দিষ্ট করা যেতে পারে।

এটি কোন মিনিফায়ার ব্যবহার করে?

জেএসের জন্য এটি YUI কমপ্রেসর এবং জেএসমিনকে সমর্থন করে, সিএসএসের জন্য আমি নিশ্চিত নই।

এটি ভাবতে পারে এমন কোনও বৈশিষ্ট্যের কি অভাব রয়েছে?

SASSসমর্থন মাথায় আসে। বলেছিল, এটি সমর্থন করে LESS


2

আমাদের প্রকল্প এটি বেশ কয়েকটি উপায়ে পরিচালনা করেছে তবে আমরা YUI কমপ্রেসরকে আমাদের বিভিন্ন পুনরাবৃত্তির মাধ্যমে ব্যবহার করে চলেছি

প্রথমদিকে জাভাস্ক্রিপ্টের জন্য প্রথমবার যখন কোনও নির্দিষ্ট ফাইল অ্যাক্সেস করা হয়েছিল তখন আমাদের কাছে একটি সার্লেট সংক্ষেপণ হ্যান্ডেল ছিল; এটি তখন ক্যাশে করা হয়েছিল। কাস্টম সম্পত্তি সম্পত্তি হ্যান্ডেল করার জন্য ইতিমধ্যে আমাদের কাছে একটি সিস্টেম ছিল তাই আমরা যে পরিবেশে কাজ করছিলাম তার উপর নির্ভর করে সংক্ষেপককে সক্ষম বা সক্ষম করতে সমর্থন করার জন্য আমরা আমাদের কনফিগারেশন ফাইলগুলি আপডেট করেছিলাম।

এখন বিকাশের পরিবেশগুলি কখনই ডিবাগিংয়ের জন্য সংকুচিত জাভাস্ক্রিপ্ট ব্যবহার করে না। পরিবর্তে আমরা যখন আমাদের অ্যাপ্লিকেশনটি কোনও ওয়ার ফাইলটিতে রফতানি করি তখন আমাদের বিল্ড প্রক্রিয়ায় সংক্ষেপণটি পরিচালনা করি।

আমাদের ক্লায়েন্ট কখনই সংক্ষেপণ সম্পর্কে উদ্বেগ উত্থাপন করেনি এবং বিকাশকারীরা জাভাস্ক্রিপ্ট ডিবাগ করার সিদ্ধান্ত না নেওয়ার আগে পর্যন্ত এটি লক্ষ্য করে না। সুতরাং আমি বলতে চাই এটি স্বল্পতম সাথে স্বচ্ছ, যদি কোনও হয় তবে পার্শ্ব প্রভাবিত করে।


আপনি আপনার বিল্ড প্রক্রিয়া থেকে YUI সংক্ষেপকটি কীভাবে ব্যবহার করবেন? মাভেন প্লাগইন নাকি অন্য কিছু?
gustafc

1
দুঃখিত, আমরা বর্তমানে পিঁপড়া ব্যবহার করি। পিঁপড়া টাস্কটির
ডুমস্পর্ক

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>

আমি অনুসন্ধান.মেন.আর.এনগ: সার্চ.ম্যাভন.আর.ইগ.-এর
টারজান

1

আমি ওয়েব সম্পদ পরিচালনার জন্য একটি ফ্রেমওয়ার্ক লিখছি, যা হম্প্পি বলে । ওয়েবজার এবং সার্ভিস লোডার ব্যবহার করে জাওর বা ডাব্লুআরও 4 জে এর চেয়ে সহজ ও আধুনিক হওয়ার লক্ষ্য।

এটি কীভাবে সংহত হয়? এটি কি আপনার বিল্ড সরঞ্জাম, একটি সার্লেট ফিল্টার, ওয়ার স্টোর পোস্ট-প্রসেসিং একক কর্মসূচি, বা অন্য কিছু?

বিকাশে, একটি সার্লেট প্রয়োজনীয় হিসাবে সম্পদগুলি প্রক্রিয়া করে। সম্পদগুলি তারপরে উত্পাদনের পূর্বে প্রাক-সংকলন করে একটি পাবলিক ফোল্ডারে স্থাপন করা হত, যাতে সঠিকভাবে উত্পন্ন হ'ল অংশটি এইচটিএমএল অন্তর্ভুক্ত করে।

এটি সক্ষম এবং অক্ষম করা কি সহজ? একটি মিনিফাইড স্ক্রিপ্ট চেষ্টা করে এবং এটি ডিবাগ করা খুব অস্বাভাবিক, তবে এটি কোনও বিকাশকারীকে পরীক্ষা করতে সক্ষম হয় যে মিনিফিকেশনটি কোনও কিছু ভঙ্গ করে না।

এটি উন্নয়ন এবং উত্পাদন পদ্ধতিগুলির মধ্যে স্যুইচিংয়ের মাধ্যমে সম্পন্ন হবে।

এটি কি স্বচ্ছতার সাথে কাজ করে, বা এর কোনও পার্শ্ব প্রতিক্রিয়া রয়েছে (মিনিফিকেশনের অন্তর্নিহিত বাদে) যা আমাকে আমার প্রতিদিনের কাজ বিবেচনা করতে হবে?

আমি বিশ্বাস করি এটি স্বচ্ছ, তবে ওয়েব জারগুলির ব্যবহারের পক্ষে দৃ .় সমর্থন করে।

এটি কোন মিনিফায়ার ব্যবহার করে?

আপনার ক্লাসপথটি যে কোনও একটি প্লাগইন ব্যবহার করুন। বর্তমানে গুগল ক্লোজার কম্পাইলারের জন্য একটি প্লাগইন লেখার দিকে তাকিয়ে।

এটি ভাবতে পারে এমন কোনও বৈশিষ্ট্যের কি অভাব রয়েছে?

এখনও প্রি-রিলিজ, যদিও আমি এটি উত্পাদন ব্যবহার করছি। ম্যাভেন প্লাগইনটিতে এখনও প্রচুর কাজ দরকার।

এ ব্যাপারে আপনি কি পছন্দ করেন?

ফ্রেমওয়ার্কটি কনফিগার করতে কেবল নির্ভরতা যুক্ত করার সরলতা

আপনি এটি সম্পর্কে কি পছন্দ করেন না?

এটা আমার বাচ্চা, আমি এটাকে ভালবাসি;)


1

সত্যিই এখানে পার্টিতে দেরি হয়ে গেছে, তবে বুঝতে পেরেছেন যে কেউ এখনও অন্যরকম উত্তর খুঁজছেন তাদের সহায়তা করতে পারে:

YUI কমপ্রেসর ব্যবহার করার চেষ্টা করার পরে, আমি হতাশ হয়েছি যে এটি jQuery এবং প্রিজমের আরও সাম্প্রতিক সংস্করণগুলির সাথে সঙ্গতিপূর্ণ নয় (আমার প্রকল্পের জন্য দুটি প্রধান তৃতীয় পক্ষের জেএস লাইব্রেরি যা আমি একটি ফাইলে সংকুচিত করতে চেয়েছিলাম)। সুতরাং আমি সিদ্ধান্ত নিয়েছি যে টিসার ব্যবহার করা হবে , যা Eg6ify-JS এর ​​একটি কাঁটা যা ES6 + সমর্থন করে। আমি সরাসরি <exec>টাস্কটি ব্যবহার করে এটি চালাতে সক্ষম হয়েছি না , তবে উইন্ডোজ কমান্ড লাইন পদ্ধতিটি উইন 10 এর জন্য কাজ করে, কমপক্ষে (এটি অন্যথায় কাজ করতে পারে না বলে বলছেন না, তবে এটি ছিল খুব সহজ কাজ)। পাথ সিস্টেমের ভেরিয়েবলের সাথে অন্য কিছু যুক্ত করার দরকার নেই (যেমন ইনস্টলেশনের সময় নোড.জেএস সাধারণত যুক্ত করা হয়)। আমি প্রথম এএনটি <concat>টাস্কটি একটি বড়, সঙ্কুচিত ফাইল তৈরি করতে ব্যবহার করি । <fileset>এটি অর্ডার সংরক্ষণ করবে হিসাবে ব্যবহার করুন (তবে তা যদি গুরুত্বপূর্ণ হয় তবে)।

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

তারপরে <exec>যেকোন এনপিএম প্রোগ্রাম যেমন টার্সার চালানোর জন্য টাস্কটি ব্যবহার করুন । এই কাজের উপর এ্যাপাচি ম্যানুয়েল পৃষ্ঠা নির্দেশিত এই 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>

সংহত? এটি একটি এএনটি বিল্ড স্ক্রিপ্টের একটি অংশ (অন্যান্য বিষয়গুলির মধ্যে কাস্টম জাভাস্ক্রিপ্ট সমর্থন করার জন্য একটি ডিআইটিএ ওপেন টুলকিট প্লাগইন - কোনও জাভা ওয়েব অ্যাপ্লিকেশন নয়, তবে এইচটিএমএল 5 আউটপুট তৈরি করতে জাভা ব্যবহার করা), সুতরাং সংহতকরণগুলি যুক্ত করার চেয়ে বেশি কিছু ছিল না নতুন লক্ষ্যে কার্য (ডিফল্ট নির্ধারণ এবং ইনপুট প্যারামিটারগুলি পরীক্ষা করার বিষয়ে আরও কোড রয়েছে!)।

সক্ষম / অক্ষম করা সহজ? আমার ক্ষেত্রে, জেএস ফাইলটি বিল্ডিং এবং মিনিফাইং অন্তর্ভুক্ত করার জন্য আমার কাছে একটি প্যারামিটার রয়েছে আমি এএনটি বিল্ডে। সুতরাং হ্যাঁ, আমি কেবলমাত্র 'হ্যাঁ' এ পরম সেট করলেই এটি এই লক্ষ্যটি সম্পাদন করে। এটিটি একটি এএনটি বিল্ডে স্থাপন করা খুব সহজ জিনিস।

স্বচ্ছ এ পর্যন্ত, আমি অন্তর্ভুক্ত থাকা বেশ কয়েকটি জেএস ফাইলের কোনওটিরই কোনও প্রভাব নেই বলে মনে হয়। এগুলির মধ্যে কয়েকটি আমার নিজস্ব (এবং আমি কোনও উপায়ে জেএস বিশেষজ্ঞ নই) এবং কয়েকটি যেমন আমি উল্লেখ করেছি, সাধারণ জেএস লাইব্রেরি।

মিনিফায়ার টারসার, তবে আপনি এই পদ্ধতির সাহায্যে কমান্ড লাইন ইনপুট সহ যে কোনও মাইনিডযুক্ত ব্যবহার করতে পারেন।

বৈশিষ্ট্য অভাব? Terser শুধুমাত্র জাভাস্ক্রিপ্ট সঙ্গে কাজ করে। আমি যদি আমার সিএসএস ফাইলগুলির জন্য একই করতে চাই (যা আমি করি) তবে আমি ওয়াইইউআই কম্প্রেসার ব্যবহার করি।

এর মতো এটি বর্তমানে একটি সক্রিয় প্রকল্প এবং এর ভাল সমর্থন রয়েছে। অধিকন্তু, বর্তমান বাস্তবায়ন (এটিটিকে কেবল এএনটি <exec>টার্গেটের মাধ্যমে কল করে ) আমাকে রাস্তায় নীচে অন্য কিছু ব্যবহার করার প্রয়োজন হলে মিনিফায়ারগুলি সরিয়ে নিতে দেয়।

পছন্দ করবেন না যে এটির জন্য নোড.জেএস প্রয়োজন নোড.জেএস এর বিরুদ্ধে কিছুই নয়, মনে রাখবেন, এই বিশেষ প্রকল্পটির অন্যথায় প্রয়োজন নেই। আমি এর জন্য YUI কমপ্রেসরের মতো একটি জাভা .jar ফাইলটি ব্যবহার করতে পছন্দ করব (আমি খুব সহজেই এটির প্রয়োজন এমন একটি প্লাগইন দিয়ে বিতরণ করতে পারি)।


প্রয়াতরাও স্বাগতম! আমি সম্মত হই যে একটি প্রকল্প দুটি পৃথক প্রোগ্রামিং পরিবেশের (জাভা + নোড) এর উপর নির্ভরশীল হওয়া খুব বিরক্তিকর। তবুও, এটি আশ্চর্যজনক নয় যে বেশিরভাগ জাভাস্ক্রিপ্টের কাজ নোড সম্প্রদায়ের মধ্যে ঘটে, সুতরাং এটি সম্পর্কে তেমন কিছুই করার নেই, এবং টার্সারকে মনে হয় যে এই দিনগুলিতে অনেক গতি রয়েছে। আপনার অবদানের জন্য ধন্যবাদ!
gustafc
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.