প্রকল্প সম্পর্কে
টার্সার হল ES6+ এর জন্য একটি জাভাস্ক্রিপ্ট ম্যাংলার এবং কম্প্রেসর টুলকিট, যা uglify-es (আর রক্ষণাবেক্ষণ করা হয় না) এবং uglify-js (যা ES6+ সমর্থন করে না) এর একটি রক্ষণাবেক্ষণকৃত বিকল্প হিসেবে অবস্থান করছে। এটি uglify-es-এর একটি ফর্ক যা মূলত uglify-es এবং uglify-js@3-এর সাথে API এবং CLI সামঞ্জস্য বজায় রাখে।
ইনস্টলেশন npm-এর মাধ্যমে হয়, হয় কমান্ড-লাইন ব্যবহারের জন্য বিশ্বব্যাপী (`npm install terser -g`) অথবা প্রোগ্রাম্যাটিক ব্যবহারের জন্য স্থানীয়ভাবে (`npm install terser`)। CLI একটি বা একাধিক ইনপুট ফাইল এবং তারপর অপশন গ্রহণ করে; যদি কোন ইনপুট ফাইল দেওয়া না হয়, তবে এটি STDIN থেকে পড়ে। ডাবল ড্যাশ দ্বারা পৃথক করা হলে ইনপুট ফাইলগুলির আগেও অপশন পাঠানো যেতে পারে।
মূল ক্ষমতাগুলির মধ্যে রয়েছে:
- পার্সিং: Acorn-কে বিকল্প পার্সার হিসেবে, বেয়ার রিটার্ন, একক-এক্সপ্রেশন পার্সিং (JSON-এর জন্য দরকারী), এবং SpiderMonkey AST ইনপুট সমর্থন করে।
- কম্প্রেশন (`--compress`): কম্প্রেসর সক্রিয় করে এবং `pure_funcs`-এর মতো অপশন গ্রহণ করে, যেগুলি রিটার্ন মান ব্যবহৃত না হলে সরানো নিরাপদ এমন ফাংশনগুলির জন্য।
- নাম ম্যাংলিং (`--mangle`): ভেরিয়েবল পুনঃনামকরণ করে, `reserved` নাম রক্ষা করতে, `toplevel` টপ-লেভেল স্কোপের জন্য এবং `eval` eval বা with ব্যবহার করে এমন স্কোপগুলির জন্য অপশন সহ।
- প্রপার্টি ম্যাংলিং (`--mangle-props`): একটি আলাদা, স্পষ্টভাবে অসুরক্ষিত পদক্ষেপ যা অবজেক্ট প্রপার্টির নাম পুনঃনামকরণ করে। এটি ম্যাংলিং শুধুমাত্র মিলে যাওয়া নামের মধ্যে সীমাবদ্ধ করতে `regex`, `reserved` তালিকা, কোটেড প্রপার্টির নাম সংরক্ষণ করতে `keep_quoted`, একটি বিশেষ মন্তব্য দিয়ে চিহ্নিত প্রপার্টিগুলির জন্য `only_annotated`, মানক গ্লোবাল অন্তর্ভুক্ত করতে `builtins`, এবং সমস্যা সমাধানের জন্য একটি স্বীকৃতিযোগ্য প্রিফিক্স/সাফিক্স যোগ করতে `debug` সমর্থন করে। একটি `--name-cache` ফাইল আলাদা রান জুড়ে ম্যাংলড প্রপার্টি ম্যাপিং ধারাবাহিক রাখতে পারে।
- ফরম্যাটিং (`--format`): অপশনগুলির মধ্যে লাইসেন্সের মতো প্রিপেন্ডেড মন্তব্যের জন্য `preamble`, `quote_style`, `wrap_iife` এবং `wrap_func_args` অন্তর্ভুক্ত।
- সোর্স ম্যাপ (`--source-map`): বাহ্যিক ম্যাপ তৈরি করতে পারে, কম্পোজড ম্যাপিংয়ের জন্য একটি ইনপুট ম্যাপ গ্রহণ করতে পারে (যেমন, CoffeeScript থেকে কম্পাইলড JS থেকে মিনিফাইড JS), এবং `base`, `content`, `filename`, `includeSources`, `root` এবং `url`-এর মতো অপশন সমর্থন করে।
- অন্যান্য CLI ফ্ল্যাগ: গ্লোবাল ডেফিনিশনের জন্য `--define`, ECMAScript সংস্করণের জন্য `--ecma`, আউটপুট একটি ফাংশনে মোড়ানোর জন্য `--enclose`, লিগ্যাসি ব্রাউজার ওয়ার্কঅরাউন্ডের জন্য `--ie8` এবং `--safari10`, `--keep-classnames` এবং `--keep-fnames`, ES6 মডিউলের জন্য `--module`, `--toplevel`, `--wrap`, `--comments` ফিল্টারিং, `--config-file` এবং `--timings`।
প্রোগ্রাম্যাটিক API একটি অ্যাসিঙ্ক `minify(code, options)` ফাংশন এবং একটি সিঙ্ক্রোনাস `minify_sync()` বিকল্প প্রকাশ করে। ফাইলের নাম দ্বারা কী-যুক্ত একটি অবজেক্ট পাঠিয়ে এটি একসাথে একাধিক ফাইল মিনিফাই করতে পারে। অপশনগুলির মধ্যে `ecma`, `enclose`, `parse`, `compress`, `mangle` (একটি `properties` সাব-অপশন সহ), `module`, `format`/`output` এবং `sourceMap` অন্তর্ভুক্ত। একটি `nameCache` অপশন ধারাবাহিক মাল্টি-পার্ট বিল্ডের জন্য ডিস্কে ম্যাংলড নাম ম্যাপিং সংরক্ষণ করতে দেয়। মিনিফিকেশন থেকে ত্রুটিগুলি `message`, `filename`, `line`, `col` এবং `pos` ক্ষেত্র সরবরাহ করে।
README-তে উল্লেখ করা হয়েছে যে বিউটিফিকেশন নথিভুক্ত নয় এবং এটি সরানো হচ্ছে, পরিবর্তে প্রিটিয়ার (Prettier) ব্যবহারের পরামর্শ দেওয়া হচ্ছে, এবং সামগ্রিক ছোট কোড তৈরি করতে মডিউল বান্ডেল করার জন্য RollupJS ব্যবহারের পরামর্শ দেওয়া হচ্ছে।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.