وقت پڑھنے کا : 10 minutes

کیا آپ وہ لحظة جانتے ہیں جہاں آپ کا لوکل سایت کچھ نہیں دکھاتا، لیکن آن لائن ڈپلوي کرنے کے بعد سب کچھ بہتر ہو جاتا ہے؟ یہ وہ چیز ہے جو میرے Gradle JBake پلاگ کے ساتھ واقع ہوئی۔ کام`serve`چوکور بٹن دکھائے جا رہے تھے، سیاہ پس منظر پر سیاہ متن، اور عجیب طور سے غائب CSS۔ لیکن`publishSite`وہ ایک ہی سائیٹ بناتا تھا، وہ، بے عیب۔ مجرم سی ایس ایس، براؤزر، یا کیش میں سے کوئی نہیں تھا۔ یہ ایک لائن کوٹلن کوڈ تھا — اور کمانڈ لائن آرگیمنٹس کے ساتھ ایک برائی عادت۔

سین : چار اسکرین شاٹس، دو رینڈرز

یہ سسٹم کرش کے بعد تھا۔ میں نے چار اسکرین شاٹس ليے لوکل رینڈر کا موازنہ کرنے کے لیے (./gradlew serve`پر`localhost:8820) ان لائن رینڈرنگ کے ساتھ (`publishSite`پر GitHub Pages). دو screenshots ہر صفحہ : اوپر اور نیچے.

مقامی رینڈر

صفحے کا سر— بٹن Project اور Template ہیںچھوٹے, مستطیل, معيارے رنگوں (نیلا اور سبز). Start Writing کارڈ کے پاس ایکسیاہ پلین پس منظر, بינה فریم.

Rendu local - haut de page

فلتزر— عنوان فرعی "آخری مضامین اور وسائل" ہےکم پڑھنے کے قابل, سیاہ پس منظر پر بہت gehra. بلوگ تصاویر کے نیچے کی تاریخیں (مثلاً '17 October 2013') ہیںغائبات.

Rendu local - bas de page

آن لائن رینڈر

صفحے کا اوپر— وہ ہی بٹن ہیںبڑے، بھیڑ سے متعلق، چمک دار نیوں سبز, بڑے حروف کا متن. کارڈ کے پاس ایکسفید گولے دار فریم ڈراپ شادو کے ساتھ.

Rendu en ligne - haut de page

پایین صفحہ— سب ٹائٹل ہےبہت پڑھنے کے قابل. تاریخیں ہیںناظرانہ. مضامین کے کارڈز میںگل کونےاور عنوانات ہیںبولد میں.

Rendu en ligne - bas de page

پہلا ردعمل: موضوع. میں ایک داینامیک موضوع نظام (روشن، تاریک، high-contrast) مبنی پر`localStorage`. شاید المقامی اسٹور ایک ہائی‑کنٹروسٹ تھیم چلا رہا تھا؟ نہیں۔ میں پہلے سے لکھ چکا تھاhttps://cheroliv.com/blog/2025/0098_preloading_css_variable_post.html[موضوعات کے پیش لوڈنگ پر ایک مکمل مضامین], میں جانتا ہوں یہ کیسے کام کرتا ہے. پھر، hi-contrast mode mein bhi, CSS کی ساخت (انڈائے بٹس، سایے) وہاں ہونی چاہیے تھی. وہ نہیں تھی.

دوسری انعکاس: براؤزر کی کش۔ نہیں، میں نے صاف پروفائل کے ساتھ ٹیسٹ کیا تھا۔ فرق برقرار رہا۔

تیسری عکاسی :`serve`یہ同样的文件 نہیں فراہم کر رہا تھا`publishSite`.

تشخیص : serve وِسے صحیح فولڈر کی طرف اشارہ نہیں کر رہا تھا

میرا گریڈیل پلاگین`bakery`دو principaux کام ہیں :

  • bake: ستاتیک سائٹ میں بنتا ہے`build/bake/`

  • serve: ایک لوکال ویب سرور چلاتا ہے

  • publishSite: دھکاتا ہے`build/bake/`GitHub Pages کی طرف

اختلاف صرف اس سے آ سکتا تھا`serve`. Si publishSite`وہ صحیح محتوا اشاعت کر رہا تھا، یعنی`build/bake/`یہ اچھا تھا۔ اگر`serve`یہ کچھ اور دکھا رہا تھا، یہ مفید نہیں تھا`build/bake/.

چلو کوڈ دیکھیں۔ میں`SiteManager.kt`, کام`serve`یہ اس طرح مُعَرّف ہے :

SiteManager.kt — La tâche serve (version buggy)
tasks.register("serve", JavaExec::class.java) { task ->
    task.apply {
        mainClass.set("org.jbake.launcher.Main")
        classpath = jbakeRuntime
        environment("GEM_PATH", jbakeRuntime.asPath)
        jvmArgs(/* ... */)
        args = listOf(
            "-b", file(site.bake.srcPath).absolutePath,
            "-s", layout.buildDirectory.get()
                .asFile.resolve(site.bake.destDirPath)
                .absolutePath
        )
    }
}

org.jbake.launcher.Main`هو نقطة الدخول لواجهة سطر أوامر JBake 2.7.0. الفكرة : المرور-b`سورس فولڈر کے لیے اور`-s`مقصد فولڈر کے لیے، پھر سرور موڈ چلائیں۔ لیکن…​

جڑ کی وجہ: JBake CLI اس طرح کام نہیں کرتا

JBake 2.7.0 انتظار کر رہا ہےمقام مبنی آرگومینٹسسورس اور مقصد کے لیے، پھر اختیاری فلگ۔ سائنچر یہ ہے:

jbake <source> <destination> [options]

لیکن میرے کوڈ میں، میں لکھ رہا تھا :

args = listOf("-b", "/path/to/site", "-s", "/path/to/build/bake")

JBake نے اسے اس طرح سمجھا:

  1. -b→ پارسیں فلگ “bake” (بولیئن), مصروف

  2. /path/to/site→ پوزیشنل آرگیم 1 (source) بن جاتا ہے

  3. -s → پارس فلگ "serve" (بولیئین), سرور شروع ہو گیافورا

  4. /path/to/build/bake→ یہ ایک یتیم دلِیل بن جاتا ہے، نادیہ یا غلط طریقے سے سمجھا جاتا ہے

نتیجہ: JBake لی رہا تھا`/path/to/site`سورس کے طور پر،یہ مقصد کا خیال نہیں رکھتا تھامُہیا (build/bake), اور اس کا ڈیفالٹ ڈائریکٹری استعمال کر رہا تھا (اکثر`./output`یا ایک موقت کاپی).فائل`css/styles.css`بِلڈ کو مسخ یا انکار کر دیا گیا تھا، اور یہ پرانا ڈیفالٹ CSS (کاسٹوم ویریبلز بغير، گرنی بغير، سایہ بغير) پیش کیا جا رہا تھا۔

قابلِ مقابلہ،bake et publishSite`وہ استعمال کرتے ہیںرسمی گریڈل JBake پلاگین(`jbake-gradle-plugin) جو صاف لکھتا ہے میں`build/bake/`Gradle API کے ذریعے۔ وہ CLI سے نہیں گزرتی۔

حل: پوزیشنل آرگومینٹس، فلگز نہیں

اصلاح سادہ — جب تک آپ جانتے ہیں۔ صرف source اور destination کو positional arguments کے طور پر منتقل کریں، پھر`-s`آخر میں :

SiteManager.kt — La tâche serve (version corrigée)
args = listOf(
    file(site.bake.srcPath).absolutePath,
    layout.buildDirectory.get()
        .asFile.resolve(site.bake.destDirPath)
        .absolutePath,
    "-s"
)

یہ سب ہے. تین لائنوں میں تبدیلی کی گئی، بگ حل ہو گیا.

پلاگ این کے مقامی شائع ہونے کے بعد (publishToMavenLocal), un `./gradlew serve`JBake کو صحیح سائنٹکس کے ساتھ চালائیں :

jbake /home/user/project/site /home/user/project/build/bake -s

اور اس بار، JBake میں شامل Jetty سرور محتوى کو بهتر سے پیش کرتا ہے`build/bake/`— ان لائن پر شائع ہونے والی کے مماثلة

@startuml
!define RECTANGLE class

package "پہلے (بگ)" {
  RECTANGLE JBakeCLI1 {
    + args = ["-b", "موقع", "-s", "بنانا/بیکنا"]
  }

  RECTANGLE Source1 {
    + site/
  }

  RECTANGLE Dest1 {
    + ??? (dossier temporaire)
  }

  RECTANGLE Jetty1 {
    + sert mauvais fichiers
  }

  JBakeCLI1 --> Source1 : lit
  JBakeCLI1 -[#red]x Dest1 : destination ignorée
  Jetty1 --> Dest1 : sert
}

package "بعد (fix)" {
  RECTANGLE JBakeCLI2 {
    + args = ["موقع", "بنانا/بیکنا", "-s"]
  }

  RECTANGLE Source2 {
    + site/
  }

  RECTANGLE Dest2 {
    + build/bake/
  }

  RECTANGLE Jetty2 {
    + sert les bons fichiers
  }

  JBakeCLI2 --> Source2 : lit
  JBakeCLI2 --> Dest2 : écrit dans
  Jetty2 --> Dest2 : sert OK
}
@enduml

تیز تصدیق کَرل کے ساتھ

server ke sahi content ki khidmat karne ke liye, aik sadha`curl`تصدیق کرتا ہے کہ`index.html`شامل ہے`data-bs-theme="light"`اور کہ`build/bake/css/styles.css`وزن 31 402 بائٹس ہے — فائل جنریٹ ہونے والا فائل کے برابر bake.

$ ./gradlew serve
# Dans un autre terminal :
$ curl -s http://localhost:8820/ | grep data-bs-theme
<html ... data-bs-theme="light" ...>

$ curl -I http://localhost:8820/css/styles.css
HTTP/1.1 200 OK
Content-Length: 31402
Content-Type: text/css

مقیامی رینڈر اب سے ہےایک جیسا پیکسلمحصول شدہ render کے لیے

کیوں یہ بگ وریشی تھا

کیا آپ دیکھ سکتے ہیں کہ یہ پکڑنے میں کیوں مشکل تھا؟

  1. کوئی واضح غلطی نہیں ہے: JBake کریش نہیں ہو رہا تھا۔ وہ "چل رہا تھا"، بس ایک غلط فولڈر کے ساتھ۔

  2. بلڈ کام کر رہا تھابراہ کرم فراہم کردہ متن فراہم کریں جسے آپ ترجمہ کرنا چاہتے ہیں۔`./gradlew bake`فائلیں درست طور پر تیار کر رہا تھا `میں`build/bake/`آپ ایک پیشہ ور مترجم ہیں۔ فرانسیسی (fr) سے اردو (ur) میں ترجمہ کریں۔

تمام بیک ٹِک کوڈ اسپینز (…​) کو بالکل ویسا ہی برقرار رکھیں — بیک ٹِک کے مواد، سپیسنگ یا پوزیشن میں کبھی تبدیلی نہ کریں۔ یہ متن ایک بڑے جملے کا حصہ ہو سکتا ہے — مزید سیاق و سباق مانگے بغیر اس ٹکڑے کا ترجمہ کریں۔ صرف ترجمہ شدہ متن فراہم کریں — کوئی وضاحت، کوئی تبصرہ، کوئی تعارف، کوئی متبادل یا کوئی آپشن نہ دیں۔

  1. ڈیپلائمنٹ کام کر رہا تھاآپ ایک پیشہ ور مترجم ہیں۔ فرانسیسی سے اردو میں ترجمہ کریں۔

تمام بیک ٹِک کوڈ سپینز (…​) کو بالکل ویسا ہی برقرار رکھیں — بیک ٹِک کے مواد، سپیسنگ یا پوزیشن میں کبھی تبدیلی نہ کریں۔ یہ متن کسی بڑے جملے کا ایک حصہ ہو سکتا ہے — مزید سیاق و سباق طلب کیے بغیر اس ٹکڑے کا ترجمہ کریں۔ صرف ترجمہ شدہ متن فراہم کریں — کوئی وضاحت، کوئی تبصرہ، کوئی تعارف، کوئی متبادل، یا کوئی آپشن نہیں ہونا چاہیے۔`publishSite`آن لائن درست مواد کو فروغ دے رہا تھا۔

  1. صرف serve خراب تھا: ڈیولپمنٹ ٹاسک، وہ جسے ہم مسلسل تکرار (iterate) کرنے کے لیے استعمال کرتے ہیں۔

  2. -key value` کی عادت: بطور ایک ڈویلپر، ہم برسوں کے Unix CLI سے عادی ہو چکے ہیں (-o output, -i input). JBake CLI ایک استثنا ہے — source اور destination پوزیشنل ہیں۔

نتیجہ

اگر آپ جبییک (یا کسی بھی CL ٹول) کو لپیٹنے والا گریڈیل پلاگین برقرار رکھتے ہیں،آرگومینٹس کی دستاویز پڑھیں即使您认为您认识它们。假设隐含(-s = "set destination")` یہ آپ کو بصری ڈبیگنگ میں گھنٹے ضائع کر سکتا ہے۔

یہاں، فِیکس حرفی طور پر تبدیل کرنے کا تھا:

args = listOf("-b", src, "-s", dest)   // ❌ BUG

en :

args = listOf(src, dest, "-s")         // ✅ FIX

تین ٹوکنز جگہ بدل دیے گئے، اور میرا مقامی سائٹ پیدا شدہ سائٹ کے برابر خوبصورت ہو جاتا ہے۔

درس: جب رینڈرنگ لوکل اور پروڈکشن میں واضح دلیل 없이 متغیر ہو، پہلے pipeline کے ساتھ شک کریں — سی ایس اس نہیں، براؤزر نہیں، اور تو فریم ورک بھی نہیں۔ اکثر وہ قدم ہوتا ہے جو رینڈرنگ سے پہلے دھوکہ دیتا ہے۔

متعلقہ مضامین