برنامه نویسی

ایجاد و انتشار یک پسوند کد VS: راهنمای گام به گام با جاوا اسکریپت

من اخیراً به یک افزونه منحصر به فرد و سرگرم کننده برای VS Code به نام vscode-pets برخوردم که توسط آنتونی شاو. این برنامه افزودنی یک حیوان خانگی مجازی مانند سگ🐶 را به صفحه نمایش شما اضافه می کند و باعث حواس پرتی از کدنویسی می شود. با این حال، بسیاری از گزینه های حیوان خانگی دیگر برای انتخاب وجود دارد.

افزونه های VS Code پلاگین هایی هستند که می توانند تجربه کدنویسی شما را با ویرایشگر کد ویژوال استودیو بهبود بخشند. آنها طیف وسیعی از ویژگی ها را ارائه می دهند، از جمله برجسته کردن نحو، قالب بندی کد، اشکال زدایی، آزمایش، پرده، قطعه، تم ها، نمادها و موارد دیگر. VS Code با در نظر گرفتن توسعه پذیری طراحی شده است و شخصی سازی و متناسب با نیازهای شما را آسان می کند. بازار VS Code در حال حاضر بیش از 30000 برنامه افزودنی را ارائه می دهد که از برنامه های افزودنی زبان و تم تا برنامه های افزودنی یکپارچه و حتی گزینه های سرگرم کننده و عجیب را شامل می شود.

برای شروع ایجاد افزونه VS Code خود، باید Node.js را روی سیستم خود نصب کنید. هنگامی که Node.js را راه اندازی کردید، می توانید از یک ابزار خط فرمان به نام yo (مخفف Yeoman) برای ایجاد یک الگوی پروژه استفاده کنید. این الگو یک ساختار و فایل های اساسی برای برنامه افزودنی شما، از جمله یک فایل مانیفست که متادیتا و وابستگی های برنامه افزودنی را تعریف می کند، در اختیار شما قرار می دهد. سپس می توانید این الگو را سفارشی کرده و بر روی آن بسازید تا عملکرد مورد نظر خود را ایجاد کنید.

مشکل

React چارچوب جاوا اسکریپت مورد علاقه من است به دلیل تطبیق پذیری و ویژگی های قدرتمندش. با این حال، گاهی اوقات ایجاد حالت کامپوننت در React می تواند کمی دردسرساز باشد و نیاز به تایپ زیادی دارد. در پست امروز، ما به این موضوع می پردازیم و راه هایی را برای کم کردن این فرآیند خسته کننده تر بررسی می کنیم. در حالی که تلاشی برای اصلاح کل فریمورک نداریم، افزونه‌ای ایجاد می‌کنیم که می‌تواند ایجاد حالت در اجزای React را ساده کند.

const [counter, setCounter] = useState(0);
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد یک حالت شمارنده ساده در React می تواند شامل تایپ های زیادی باشد که می تواند خسته کننده و وقت گیر باشد. همه ما می دانیم که تایپ مکرر همان کد چقدر می تواند خسته کننده باشد، درست است؟ اینجاست که برنامه افزودنی جدید ما، react-setstate وارد می‌شود. با این افزونه، می‌توانیم متغیرهای حالت را تنها با چند ضربه کلید ایجاد کنیم و در وقت و تلاش ما صرفه‌جویی کنیم.

راه اندازی محیط توسعه

برای شروع کار با ایجاد پسوند Visual Studio Code، باید دو بسته yo و generator-code را نصب کنیم. اینها را می توان به صورت سراسری با استفاده از npm با دستور زیر نصب کرد:

npm install -g yo generator-code
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

yo یک ابزار داربست محبوب است که به توسعه دهندگان کمک می کند تا پروژه های جدیدی را با استفاده از ژنراتورهای قابل تنظیم ایجاد کنند. generator-code یک ژنراتور است که به طور خاص برای ایجاد پسوندهای Visual Studio Code طراحی شده است. با نصب این دو بسته، ما قادر خواهیم بود به سرعت یک پروژه افزونه جدید تولید کنیم و بلافاصله کدنویسی را شروع کنیم!

اکنون که بسته های لازم را نصب کرده ایم، می توانیم شروع به ساخت پروژه خود کنیم. برای انجام این کار، ترمینال خود را باز کرده و دستور زیر را اجرا کنید:

yo code
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این یک پوسته تعاملی راه اندازی می کند که ما را در روند ایجاد برنامه افزودنی جدید راهنمایی می کند. از ما خواسته می شود که جزئیات مختلفی را در مورد برنامه افزودنی خود وارد کنیم، مانند نام، توضیحات و نوع افزونه ای که می خواهیم ایجاد کنیم. با پیروی از دستورات و پاسخ دادن به سوالات، ما قادر خواهیم بود به سرعت داربست را برای برنامه افزودنی جدید خود تولید کنیم و شروع به ساخت کد خود کنیم.

     _-----_     ╭──────────────────────────╮
    |       |    │   Welcome to the Visual  │
    |--(o)--|    │   Studio Code Extension  │
   `---------´   │        generator!        │
    ( _´U`_ )    ╰──────────────────────────╯
    /___A___\   /
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

? What type of extension do you want to create? New Extension (JavaScript)
? What's the name of your extension? react-setstate
? What's the identifier of your extension? react-setstate
? What's the description of your extension? set state in react
? Enable JavaScript type checking in 'jsconfig.json'? No
? Initialize a git repository? Yes
? Which package manager to use? npm
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هنگامی که به تمام درخواست‌های موجود در پوسته تعاملی yo پاسخ دادیم، بر اساس ورودی‌های ما پروژه جدیدی برای ما ایجاد می‌کند. با رفتن به دایرکتوری آن در ترمینال و اجرای دستور زیر می توانیم این پروژه را در Visual Studio Code باز کنیم:

code .
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

آناتومی پروژه

ساختار پروژه ما باید چیزی شبیه به این باشد، اگر TypeScript را انتخاب کرده باشید، ممکن است چند فایل اضافی داشته باشید. ما تمام پرونده ها را مرور خواهیم کرد و دلیل وجود آنها را توضیح خواهیم داد.

├── .vscode // launch a new window for testing 
   ├── launch.json    
   └── tasks.json 
├── node_modules  //node_modules
├── test //tests
   ├──  suite
   ├── ├── extension.test.js       
   └── runTest.js     
├── .eslintrc.json // ESLint config
├── .gitignore //ignore node_modules and other specified files
├── .vscodeignore   //ignore files we don't have published
├── CHANGELOG.md //keep track of changes
├── extension.js //source code
├── jsconfig.json   //JS config  
├── package-lock.json //generated by npm   
├── package.json //manifest    
├── README.md  //info about extension
├── vsc-extension-quickstart.md //quick start guide 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • را launch.json و tasks.json برای راه اندازی یک پنجره جدید از کد VS برای آزمایش برنامه افزودنی استفاده می شود.
  • node_modules – node_modules برای پروژه ما.
  • را test پوشه شامل تمام تست های پسوند ما خواهد بود.
  • .eslintrc.json شامل پیکربندی ESLint برای این پروژه خواهد بود.
  • .gitignore حاوی لیستی از نام فایل‌ها و/یا پوشه‌هایی است که وقتی برنامه افزودنی ما را به پلتفرم کنترل نسخه مانند Github فشار می‌دهید، درج نمی‌شود.
  • .vscodeignore حاوی لیستی از نام فایل ها و/یا پوشه هایی است که باید در نهایت پس از انتشار برنامه افزودنی خود منتشر شوند.
  • CHANGELOG.md برای پیگیری تغییراتی که در برنامه افزودنی خود ایجاد می کنیم استفاده می شود.
  • extension.js اینجاست که ما کد/منطق را در پس پسوند (نقطه ورودی) خود می نویسیم.
  • jsconfig.json شامل پیکربندی جاوا اسکریپت ما خواهد بود
  • package.json فایل مانیفست هر پروژه Node.js است و حاوی ابرداده پروژه است.
  • README.md حاوی اطلاعات مربوط به برنامه افزودنی ما خواهد بود.
  • vsc-extension-quickstart.md راهنمای شروع سریع پیش‌فرض است که با پروژه ما ارائه می‌شود.

نقطه ورود

باز کن extension.js فایلی که حاوی کد دیگ بخار و نظرات است. قبل از اینکه به پاکسازی آن بپردازیم، اجازه دهید به طور خلاصه کد را درک کنیم.

const vscode = require('vscode');
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ماژول API توسعه پذیری vscode را وارد می کند.

function activate(context) {

    console.log('Congratulations, your extension "react-setstate" is now active!');

    let disposable = vscode.commands.registerCommand('react-setstate.helloWorld', function () {

        vscode.window.showInformationMessage('Hello World from react-setstate!');
    });

    context.subscriptions.push(disposable);
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مورد فوق است activate عملکردی که با فعال شدن برنامه افزودنی ما تماس می گیرد.

let disposable = vscode.commands.registerCommand('react-setstate.helloWorld', function () {

        vscode.window.showInformationMessage('Hello World from react-setstate!');
    });
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

را react-setstate.helloWorld یک شناسه منحصر به فرد برای یک فرمان است که در هنگام راه اندازی یک عمل خاص را انجام می دهد. به عنوان مثال، زمانی که react-setstate.helloWorld دستور فراخوانی می شود، پیامی را نشان می دهد که “Hello World from react-setstate!”. با این حال، شناسه‌های فرمان می‌توانند طولانی باشند، و تایپ کردن آنها در هر زمان ممکن است خسته‌کننده باشد. بنابراین، می‌توانیم برای سهولت استفاده، نام‌های ساده‌تری را به این شناسه‌های فرمان اختصاص دهیم

package.json

در package.json فایل، در زیر قسمت مشارکت، آرایه ای به نام دستورات وجود دارد که شامل شناسه فرمان پیش فرض است. به طور پیش فرض، عنوان react-setstate.helloWorld دستور روی چیزی به یاد ماندنی تنظیم شده است، “Hello World”. هر شناسه دستور جدیدی که ثبت می کنیم می تواند به این آرایه اضافه شود. برای اجرای برنامه افزودنی، می توانیم فشار دهیم Ctrl + F5، که یک پنجره VS Code جدید با نام باز می کند[Extension Development Host]برای راه اندازی برنامه افزودنی خود، می توانیم فشار دهیم Ctrl + Shift + P برای باز کردن پالت فرمان، نامی را که پسوند داده ایم (در این مورد “Hello World”) تایپ کرده و Enter را فشار دهید.

Hello World در گفتگوی باز تایپ شده تا برنامه افزودنی راه اندازی شود.

این برنامه افزودنی ما را راه اندازی می کند

راه اندازی برنامه افزودنی با موفقیت انجام شد

ما می توانیم متوقف کنیم Extension Development Host با فشار دادن مربع قرمز

extension.js

این آموزش بسیار طولانی شده است، بنابراین برای صرفه جویی در زمان، کد را پیست می کنم و سپس توضیح می دهم که هر قسمت چه کاری انجام می دهد.


const vscode = require('vscode');

/**
 * @param {vscode.ExtensionContext} context
 */
function activate(context) {
    let disposable = vscode.commands.registerCommand('react-setstate.setState', async function () {
        const inputText = await vscode.window.showInputBox({
            placeHolder: "Eg: show modal",
            prompt: "Enter the name of your state.",
          });

          if (inputText === "") {
            vscode.window.showErrorMessage(
              "You need to type in something for this to work😊."
            );
            return;
          }

          if (inputText == null) return;

          const words = inputText.split(" ");
          const stateList = [];
          const actionList = [];

          for (let i = 0; i < words.length; i++) {
            if (i !== 0) {
              stateList.push(capitalize(words[i]));
            } else {
              stateList.push(words[i]);
            }
            actionList.push(capitalize(words[i]));
          }

          const transformedState = stateList.join("");
          const transformedAction = "set" + actionList.join("");
          const text = `const [${transformedState} , ${transformedAction}] = useState(null)`;

          const editor = vscode.window.activeTextEditor;

          if (editor) {
            const selection = editor.selection;

            editor.edit((editBuilder) => {
              editBuilder.replace(selection, text);
            });
          }
    });

    context.subscriptions.push(disposable);
}

// This method is called when your extension is deactivated
function deactivate() {}

function capitalize(word) {
    return word.charAt().toUpperCase() + word.slice(1);
}


module.exports = {
    activate,
    deactivate
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • تابع فعال کردن را ثبت می کند react-setstate.setState شناسه فرمان که قبلاً در فایل extension.js تعریف کردیم.

در مرحله بعد، ما باید آن را به روز کنیم package.json فایلی که منعکس کننده این تغییر است. ما باید نام دستور خود را به react-setstate.setState و عنوان مناسبی به آن بدهید. در حال حاضر، ما آن را صدا خواهیم کرد React setState، اما می توانید هر نامی را که ترجیح می دهید انتخاب کنید.

"commands": [
    {
      "command": "react-setstate.setState",
      "title": "React setState"
    }
  ]
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

فراموش نکنید که آرایه “activationEvents” را نیز به روز کنید.

"activationEvents": [
    "onCommand:react-setstate.setState"
  ],
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • پس از فعال شدن برنامه افزودنی، از کاربر خواسته می‌شود نام حالتی را که می‌خواهد ایجاد کند، وارد کند که در آن ذخیره می‌شود. inputText متغیر.
const inputText = await vscode.window.showInputBox({
    placeHolder: "Eg: show modal",
    prompt: "Enter the name of your state.",
  });
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • اگر کاربر چیزی را تایپ نکرده باشد و دستور را خالی بگذارد، دستور را می بندیم و پیامی مبنی بر ایجاد حالت ایجاد نشده برمی گردانیم.
if (inputText === "") {
    vscode.window.showErrorMessage(
      "You need to type in something for this to work😊."
    );
    return;
  }
if (inputText == null) return;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • دلیل تقسیم متن بر اساس فاصله این است که نام یک ایالت به طور بالقوه می تواند چندین کلمه داشته باشد، مانند “show modal”، و ما می خواهیم بتوانیم هر کلمه را به صورت جداگانه با حروف بزرگ بنویسیم.
const words = inputText.split(" ");
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • تابع بزرگ کردن یک تابع کمکی است که یک رشته می گیرد و حرف اول هر کلمه در رشته را بزرگ می کند. ما از این تابع برای اطمینان از اینکه نام ایالت وارد شده توسط کاربر به درستی با حروف بزرگ نوشته شده است استفاده خواهیم کرد.
function capitalize(word) {
    return word.charAt().toUpperCase() + word.slice(1);
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • روش مرسوم ایجاد حالت ها در React شامل تعریف یک متغیر با استفاده از قلاب useState است که معمولاً به شکل زیر است:
const [showModal, setShowModal] = useState(false)
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در سمت چپ، خود دولت را داریم و در سمت راست، عمل را داریم. به همین دلیل ما دو آرایه داریم: stateList نسخه های با حروف بزرگ تمام کلماتی که کاربر تایپ کرده است، به جز کلمه اول، ذخیره می کند.

for (let i = 0; i < words.length; i++) {
    if (i !== 0) {
      stateList.push(capitalize(words[i]));
    } else {
      stateList.push(words[i]);
    }
    actionList.push(capitalize(words[i]));
  }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

const stateList = ['show', 'Modal']
const actionList = ['Show', "Modal']
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از کد بالا، آرایه stateList باید شامل تمام کلمات با حروف بزرگ از ورودی کاربر به جز کلمه اول باشد. آرایه actionList باید حاوی نسخه بزرگ کلمه اول باشد که کلمه “Modal” را دنبال می کند.

  if (i !== 0) {
      stateList.push(capitalize(words[i]));
    } 
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • ما می توانیم عناصر را در خود به هم بچسبانیم stateList آرایه ای برای تشکیل یک رشته از آنجا که stateList در حال حاضر تمام کلمات بزرگ مورد نیاز ما را دارد، می‌توانیم آنها را مستقیماً بدون پردازش بیشتر به یکدیگر بپیوندیم.
const transformedState = stateList.join(""); // showModal
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • در اینجا ما عناصر آرایه actionList را به هم می پیوندیم تا یک رشته با مجموعه پیشوند تشکیل دهیم.
const transformedAction = "set" + actionList.join("");
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  • حالا باید دو رشته مجزا داشته باشیم.
const transformedState = "showModal"
const transformedAction = "setShowModal"
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اکنون تنها کاری که باید انجام دهیم این است که آنها را به هم نزدیک کند.

const text = `const [${transformedState} , ${transformedAction}] = useState(null)`;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این درج است transformedState و transformedAction رشته به رشته بالا.

const text = `const [showModal , setShowModal] = useState(null)`;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

رشته ما اکنون باید مانند شکل بالا باشد.

اکنون که وضعیت خود را داریم، به راهی برای چسباندن آن متن در ویرایشگر/VS Code خود نیاز داریم.

const editor = vscode.window.activeTextEditor;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای دریافت ویرایشگر متن فعال فعلی، از vscode.window.activeTextEditor. سپس می توانیم از selection.active برای بدست آوردن موقعیت مکان نما در ویرایشگر متن استفاده کنیم.

  const selection = editor.selection;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در نهایت از خط زیر برای جایگزینی متن روی آن خط با متن خود استفاده می کنیم.

if (editor) {
    const selection = editor.selection;

    editor.edit((editBuilder) => {
      editBuilder.replace(selection, text);
    });
  }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای آزمایش اینکه آیا همه چیز همانطور که انتظار می رود کار می کند یا خیر، می توانید برنامه افزودنی را با فشار دادن اجرا کنید Ctrl + F5.

برنامه افزودنی Gif نسخه ی نمایشی

در حال انتشار برنامه افزودنی ما

با توجه به اینکه همه چیز طبق انتظار کار می کند، زمان آن رسیده است که برنامه افزودنی خود را منتشر کنیم و آن را برای استفاده دیگران در دسترس قرار دهیم. برای انجام این کار، به یک توکن دسترسی شخصی از Azure DevOps و یک حساب ناشر نیاز داریم.

هنگامی که سازمان خود را در Azure DevOps راه اندازی کردید، می توانید این مراحل را برای ایجاد رمز دسترسی شخصی خود دنبال کنید:

رمز دسترسی شخصی

منوی تنظیمات شخصی

رمز دسترسی شخصی ایجاد کنید

  1. روی نماد کاربر در کنار تصویر پروفایل کلیک کنید.
  2. روی نشانه دسترسی شخصی کلیک کنید.
  3. این باید شما را به صفحه ای ببرد تا توکن جدید تولید کنید.
  4. روی New Token کلیک کنید تا یک مدال باز شود.
  5. در مودال، اطلاعات لازم را برای توکن خود ارائه دهید.
  6. روی Show more scopes کلیک کنید و به دنبال Marketplace بگردید و گزینه Manage را علامت بزنید.
  7. برای ایجاد توکن خود روی ایجاد کلیک کنید.
  8. مطمئن شوید که توکن را کپی کنید زیرا بعداً به آن نیاز خواهیم داشت.

ناشر

ما باید یک ناشر ایجاد کنیم تا پسوند ما را تحت آن منتشر کند. این مراحل را دنبال کنید:

  1. به صفحه ثبت نام ناشر بروید.
  2. برای ایجاد ناشر جدید بر روی Create Publisher کلیک کنید.
  3. به یاد داشته باشید که نام منحصر به فرد ناشر را در جایی امن کپی و جایگذاری کنید، زیرا بعداً برای ورود به آن به آن نیاز خواهیم داشت.

با کپی شدن نام ناشر، باید فیلد ناشر را در قسمت به روز رسانی/ایجاد کنیم package.json فایل با نام ناشر ما

  "publisher": "your-publisher-name",
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

نصب vsce

npm install -g @vscode/vsce
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

vsce یک ابزار CLI برای مدیریت پسوندهای VS Code است. از آن برای ورود با نام ناشر و رمز دسترسی شخصی خود استفاده کنید.

vsce login <unique publisher name>
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

vsce publish
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

اگر با پیام خطایی مواجه شدید که به شما دستور به‌روزرسانی فایل README.md را می‌دهد، می‌توانید از الگوی زیر استفاده کنید یا قالب خود را ایجاد کنید. README.md متن

# react-setstate README

react-setstate is an extension that allows react developers to create state quickly.
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پس از انتشار برنامه افزودنی، در VS Code Marketplace تأیید می شود که ممکن است چند دقیقه طول بکشد. در اینجا می توانید وضعیت فرآیند تأیید را بررسی کنید.

تبریک می گویم! برنامه افزودنی شما با موفقیت در VS Code ایجاد و منتشر شده است [marketplace].
(https://marketplace.visualstudio.com/vscode) برای دانلود و استفاده هر کسی.

  • کد منبع را اینجا بررسی کنید.
  • پسوند را از اینجا دانلود کنید.

تبریک میگم

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا