مواد پر جائیں

JavaScript منیفائی کریں

اسی قسم کا منیفائر جو build ٹولز استعمال کرتے ہیں، اس صفحے کے اندر چلتا ہوا۔ جدید syntax اور modules سمجھے جاتے ہیں، اور آپ کا سورس کبھی محفوظ نہیں کیا جاتا۔

  • کبھی محفوظ نہیں کی جاتی
  • نہ قطار، نہ انتظار
  • نہ سائن اپ، نہ واٹر مارک
منیفائیڈ

منیفائیڈ JavaScript یہاں نظر آئے گا۔

یہ کیسے کام کرتا ہے

1

اپنی JavaScript پیسٹ کریں

یا فائل ڈراپ کریں۔ modules، classes اور جدید syntax سب سمجھے جاتے ہیں۔

2

آپشنز منتخب کریں

لوکل ویری ایبلز کے نام بدلیں، console calls ہٹائیں، لائسنس کمنٹس رکھیں — ہر ایک کا الگ سوئچ ہے۔

3

کاپی یا ڈاؤن لوڈ کریں

پہلے اور بعد کے سائز کے ساتھ۔

نام بدلنا، ہٹانا، اور وہ چیزیں جنہیں کبھی نہیں چھیڑنا چاہیے

تین کام ہوتے ہیں، اس ترتیب سے کہ کتنی بچت کرتے ہیں اور آپ کو کتنے مہنگے پڑتے ہیں۔ خالی جگہ اور کمنٹس ہٹتے ہیں، جو مفت ہے۔ dead code ہٹتا ہے — ایسی branch جو کبھی نہیں چل سکتی، ایسا ویری ایبل جسے ویلیو دی گئی مگر کبھی پڑھا نہیں گیا۔ اور لوکل نام چھوٹے کیے جاتے ہیں، یوں احتیاط سے رکھا گیا نام calculateMonthlyTotal ایک حرف بن جاتا ہے۔ زیادہ تر بچت اسی آخری کام میں ہے اور یہی آؤٹ پٹ کو ناقابلِ فہم بھی بناتا ہے، جو شپ کرنے کے لیے ٹھیک ہے اور ڈیبگ کرنے کے لیے بے کار۔

جس چیز کو باہر کی دنیا نام سے پکارتی ہے اس کا نام نہیں بدلا جا سکتا، اور یہیں غلطی کر کے منیفائر کوڈ توڑتے ہیں۔ export کیے گئے functions، strings کے ذریعے پڑھی جانے والی object properties، window کے ذریعے پہنچی جانے والی ہر چیز، اور eval میں استعمال ہونے والے نام — سب کو جوں کا توں رہنا چاہیے، کیونکہ کہیں اور کوئی چیز انہیں اسی نام سے ڈھونڈ رہی ہے جو آپ نے لکھا۔ خاص طور پر properties کو پہلے سے نہیں چھیڑا جاتا: user.emailAddress کا نام بدلنا اسی لمحے کوڈ توڑ دے گا جب وہ object JSON میں serialise ہو یا ایسا کوڈ اسے پڑھے جو الگ سے minify ہوا ہو۔

source map یا اصل فائل سنبھال کر رکھیں۔ نام ختم ہونے کے بعد، کسی حقیقی صارف کی stack trace یوں پڑھی جاتی ہے کہ function t میں حرف نمبر 48,213 پر خرابی ہے، جس سے کچھ پتا نہیں چلتا۔ source map ڈیبگر اور ایرر رپورٹنگ میں اصل نام اور لائن نمبر واپس لے آتا ہے، اور اسے بنانے کی کوئی قیمت نہیں کیونکہ یہ ایک الگ فائل کے طور پر جاتا ہے جو صرف تب لوڈ ہوتی ہے جب کوئی developer tools کھولے۔

لائسنس کمنٹس پہلے سے رکھے جاتے ہیں، اور یہ پسند ناپسند نہیں بلکہ قانونی معاملہ ہے۔ بہت سا اوپن سورس کوڈ اس ایک شرط پر کھلے لائسنس کے ساتھ ملتا ہے کہ اس کا کاپی رائٹ نوٹس اس کے ساتھ رہے — MIT اور BSD دونوں یہ صاف لکھتے ہیں۔ تھرڈ پارٹی کوڈ والے bundle سے یہ کمنٹس ہٹانا آپ کو اسی لائسنس کی خلاف ورزی میں ڈال دیتا ہے جس نے آپ کو اسے استعمال کرنے دیا۔ یہ چند سو بائٹس ہی تو ہیں۔

جب آپ کو کچھ اور چاہیے

اس کام کی جگہ build ہے، براؤزر ٹیب نہیں، اور جدید bundlers یہ معمول کے طور پر کرتے ہیں۔ esbuild --minify اور Rollup یا Vite build کے وقت minify کرتے ہیں، خود بخود source maps بناتے ہیں، اور — کہیں زیادہ اہم — tree shaking کرتے ہیں، یعنی آپ کی dependencies کے وہ exports ہٹا دیتے ہیں جو آپ کبھی import نہیں کرتے۔ کسی حقیقی ایپلیکیشن میں اس سے اتنی بچت ہوتی ہے جتنی کسی تیار فائل کو minify کرنے سے کبھی نہیں ہو سکتی۔

آپٹیمائز کرنے سے پہلے ناپیں۔ bundle analyser عموماً دکھا دے گا کہ فائل کا زیادہ تر حصہ ایک بڑی dependency ہے — تاریخوں کی کوئی لائبریری، آئیکنز کا کوئی سیٹ، ایک چارٹ کے لیے پورا کا پورا شامل کیا گیا charting پیکج۔ اسے بدلنا یا lazy load کرنا کسی بھی حد کے minify کرنے سے بہتر ہے، اور code splitting تاکہ صفحہ صرف وہی لوڈ کرے جس کی اسے ضرورت ہے، دونوں سے بہتر ہے۔

اکثر پوچھے جانے والے سوالات

کیا میرا کوڈ کہیں محفوظ کیا جاتا ہے؟

نہیں، اور سورس کوڈ کے لیے یہی تو اصل بات ہے۔ کچھ بھی محفوظ نہیں کیا جاتا اور کوئی سرور اسے کبھی نہیں دیکھتا۔ اپنا ملکیتی سورس کسی ایسے آن لائن منیفائر میں پیسٹ کرنا جو اسے کہیں بھیج دے، اسے ظاہر کر دینا ہے، سائٹ ڈیٹا رکھنے کے بارے میں جو بھی کہے — اور یہ بالکل وہ کام ہے جو جلدی میں بغیر سوچے کر لیا جاتا ہے۔

کیا یہ وہی منیفائر ہے جو میرے build ٹول میں ہے؟

تقریباً یقیناً، ہاں۔ یہ اسی قسم کا منیفائر ہے جو webpack، Rollup، Vite اور زیادہ تر دوسرے bundlers استعمال کرتے ہیں۔ فرق صرف اتنا ہے کہ یہ یہاں چلتا ہے، کسی ایسی چیز کے طور پر نہیں جسے آپ انسٹال کریں۔

کیا یہ میرے کوڈ کا کام بدل دے گا؟

نہیں بدلنا چاہیے، اور یہ فرض نہیں کیا جاتا بلکہ جانچا جاتا ہے: ہمارے ٹیسٹ ایک module کو minify کرتے ہیں، اصل اور minify شدہ دونوں ورژنز import کر کے چلاتے ہیں، اور نتائج کا موازنہ کرتے ہیں۔ جو چیزیں بدلتی ہیں: لوکل ویری ایبلز کے نام (جب تک آپ یہ بند نہ کریں)، وہ constant expressions جن کا نتیجہ پہلے سے نکالا جا سکے، اور dead code۔ جو چیز runtime پر کسی function کے نام پر، یا Function.prototype.toString پر انحصار کرتی ہو، وہ نام بدلنے سے ٹوٹ سکتی ہے — اگر آپ ان میں سے کسی پر انحصار کرتے ہیں تو نام بدلنا بند کر دیں۔

“ماڈیول کے طور پر پارس کریں” کا کیا مطلب ہے؟

یہ کہ آپ کا کوڈ ES module کے طور پر پارس ہو یا سادہ اسکرپٹ کے طور پر۔ modules میں import اور export استعمال ہو سکتے ہیں اور وہ ہمیشہ strict mode میں ہوتے ہیں۔ یہ پہلے سے آن ہے کیونکہ زیادہ تر جدید کوڈ یہی ہوتا ہے؛ اگر آپ کی فائل پرانے انداز کی اسکرپٹ ہے جو "with" استعمال کرتی ہے یا non-strict رویے پر انحصار کرتی ہے تو اسے بند کر دیں۔

کیا مجھے console calls ہٹانی چاہییں؟

پروڈکشن کے لیے عموماً ہاں — یہ فالتو شور ہیں، اور developer tools کھولنے والے کسی بھی شخص کو اندرونی تفصیلات دکھا سکتی ہیں۔ یہ پہلے سے بند ہے کیونکہ کسی ٹول کو کہے بغیر خاموشی سے کوڈ حذف نہیں کرنا چاہیے۔

کیا یہ لائسنس کمنٹس رکھتا ہے؟

ہاں، پہلے سے۔ /*! سے شروع ہونے والے کمنٹس اور @license یا @preserve والے کمنٹس رکھے جاتے ہیں، کیونکہ کسی اور کی MIT لائسنس والی لائبریری سے انہیں ہٹانا لائسنس کی خلاف ورزی ہے۔ عام کمنٹس ہٹا دیے جاتے ہیں۔

کیا یہ source map بنا سکتا ہے؟

اس صفحے پر نہیں۔ source map صرف تب کام کا ہے جب وہ کسی معلوم URL پر اصل فائل کے ساتھ موجود ہو، جو پیسٹ اور کاپی والے ٹول میں فٹ نہیں بیٹھتا — اس کی صحیح جگہ آپ کا build ٹول ہے۔

کیا سائز کی کوئی حد ہے؟

کوئی مقررہ حد نہیں۔ چند ہزار لائنیں ایک سیکنڈ سے کہیں کم میں minify ہو جاتی ہیں؛ بہت بڑی bundled فائل زیادہ وقت لیتی ہے کیونکہ کسی بھی نام کو بدلنے سے پہلے پوری فائل پارس کی جاتی ہے۔ اگر آپ پورا پروڈکشن bundle minify کر رہے ہیں تو اس کے لیے آپ کا build ٹول بہتر جگہ ہے — یہ صفحہ ایک فائل یا فوری جانچ کے لیے ہے۔

جاننا مفید ہے: لوکل ویری ایبلز کے نام بدلنے سے فائل چھوٹی اور آؤٹ پٹ ناقابلِ فہم ہو جاتا ہے، جو شپ کرنے کے لیے ٹھیک ہے اور ڈیبگ کرنے کے لیے بے کار — source map یا اصل فائل سنبھال کر رکھیں۔ لائسنس کمنٹس پہلے سے رکھے جاتے ہیں کیونکہ انہیں ہٹانے سے اس کوڈ کے لائسنس کی خلاف ورزی ہو سکتی ہے جسے استعمال کرنے کی آپ کو اجازت ہے۔

یہ ٹول اپنی ویب سائٹ پر لگائیں

کسی بھی بلاگ، کلاس پیج یا ہیلپ آرٹیکل کے لیے مفت۔ ایک اسنیپٹ پیسٹ کریں اور آپ کے وزیٹرز اسے سیدھا آپ کے صفحے پر استعمال کر سکیں گے۔