🧩 چرا هرگز در پسوند کد VS شما هرگز به صورت insolveWebViewView فراخوانی نمی شود

یک مسئله ظریف اما مهم که می تواند وب سایت های نوار کناری شما را بی سر و صدا بشکند. در اینجا نحوه رفع آن آورده شده است.
من اخیراً ساعت ها برای اشکال زدایی مسئله ای که باید پنج دقیقه طول بکشد ، برای شناسایی. من در حال ساخت داشبورد نوار کناری برای Hookguard Vs Code Extension با استفاده از WebviewViewProvider
API به نظر می رسید همه چیز به درستی سیم کشی شده است:
- ✅ ارائه دهنده ثبت شد
- ✅ نمای در نوار کناری ظاهر شد
- ✅ پسوند فعال بود
❌ اما resolveWebviewView()
هرگز فراخوانده نشده است. بدون سیاههها بدون خطا فقط سکوت
⚠ مشکل
علی رغم آنچه مستندات نشان می دهد (حداقل در زمان نوشتن) ، به سادگی یک دیدگاه را در خود تعریف کنید package.json
با یک معتبر id
و ارتباط آن با a WebviewViewProvider
کافی نیست
کد VS با خوشحالی نمای شما را نشان می دهد بدون استناد ارائه دهنده شما مگر اینکه صریحاً نوع نمایش را به عنوان تعریف کنید webview
بشر
🧱 قطعه گمشده: "type": "webview"
این چیزی است که من از دست داده ام:
"views": {
"hookguard-sidebar": [
{
"type": "webview", // <- REQUIRED for resolveWebviewView to be called
"id": "hookguardView",
"name": "Dashboard"
}
]
}
این type
املاک هنگام ثبت نام در نظر گرفته شده برای استفاده از آن اجباری است WebviewViewProvider
رابط بدون آن ، دیدگاه شما به عنوان یک مکان نگهدارنده استاتیک و بدون عملکرد ارائه می شود.
🧨 چرا خطرناک است
این مسئله موذیانه است زیرا:
- پسوند شما بدون خطا کامپایل و فعال می شود
- نمای شما در نوار فعالیت نشان می دهد
- شما هیچ سیاههی ، بدون ردپای پشته ، بدون هشدار می بینید
در پروژه ای که از مراحل ساخت استفاده می کند (مانند بسته بندی با Esbuild) ، ممکن است فرض کنید فاصله شما بی نظیر است یا واردات شما شکسته است. اما در واقعیت ، VS Code هرگز ارائه دهنده خود را به نمای محدود نمی کند.
✅ حداقل راه اندازی کار
package.json
"viewsContainers": {
"activitybar": [
{
"id": "hookguard-sidebar",
"title": "HookGuard",
"icon": "media/icon.svg"
}
]
},
"views": {
"hookguard-sidebar": [
{
"type": "webview",
"id": "hookguardView",
"name": "Dashboard"
}
]
}
⚙ فعال سازی پسوند
vscode.window.registerWebviewViewProvider(
"hookguardView",
new HookGuardViewProvider(context)
)
🧠 اجرای ارائه دهنده
export class HookGuardViewProvider implements vscode.WebviewViewProvider {
resolveWebviewView(view: vscode.WebviewView) {
view.webview.options = { enableScripts: true }
view.webview.html = ``
}
}
thoughts افکار نهایی
اگر در حال ساختن یک نوار کناری در VS Code هستید ، حتما نوع نمای خود را صریح تعریف کنید. در غیر این صورت ، شما در تعقیب ارواح در سیستم ساخت ، وضعیت ویرایشگر یا مسیرهای پرونده خود خواهید بود.
این حذف کوچک ساعت ها را برای ساعت ها شکست و بازخورد صفر ایجاد کرد.
این یک لاینر است که می تواند ناامیدی زیادی را برای شما نجات دهد:
"type": "webview"