<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مهران مطیعی</title>
        <link>https://virgool.io/feed/@straxico</link>
        <description>اندک نویس | چاینده در باد | هویج پرست |لواشک باز | شب گام | خِرَدسوده | رقاصِ بازار های قرمز | مجنونِ بی لیلی | نخورده ی همیشه مست |  port 3000 | estp</description>
        <language>fa</language>
        <pubDate>2026-07-06 13:59:26</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/2788/avatar/xji1uW.png?height=120&amp;width=120</url>
            <title>مهران مطیعی</title>
            <link>https://virgool.io/@straxico</link>
        </image>

                    <item>
                <title>دیپلوی آسان تر از همیشه</title>
                <link>https://virgool.io/@straxico/%D8%AF%DB%8C%D9%BE%D9%84%D9%88%DB%8C-%D8%A2%D8%B3%D8%A7%D9%86-%D8%AA%D8%B1-%D8%A7%D8%B2-%D9%87%D9%85%DB%8C%D8%B4%D9%87-ergcu6wsbhh2</link>
                <description>سلاماگه نوشته های قبلی من رو دیده باشین میبینین که شروع کردم تا چیزایی که باهاشون سر وکار دارم رو به هم چسبوندن ... اکسیر سایتیه که دوسش دارم ولی محیطش نیاز های من رو رفع نمیکنه قرار بود یه فرانت برای استفاده از api سایت اکسیر بزنم . دایکیومنت api رو میتونین از apidocs.exir.io ببینین .. که خب تا اینجا ی کار همه کاری کردم به جز زدن اون فرانت ...ابزار های که دوست داشتم رو در کنار هم کانفیگ کردم و رسیدم به یه ترکیب فعلا خوب که برای پروژه های بعدیم ازشون استفاده میکنم. البته ناگفته نماند که یه کمی جلو هم رفتیما .خب بریم سر اصل مطلبکارایی که تا اینجا کردم رو میتونین داخل ریپوی زیر ببینین https://github.com/straxico/react-strix چه عکس بزرگی شد...ویرگول اینم یه فکری به حالش بکن...خلاصه که تا اینجا پیش رفتممن برای توسعه نیاز داشتم که بعد از هر بار پوش کردن یه نسخه از استوری بوک و یه نسخه از وبسایت ساخته بشه. توو قسمت های قبل شروع کردم این کار رو با github action پیش بردن و حالا میشه گفت که تا حدودی اتفاق های خوبی افتاده که گفتم شاید دونستنش به درد بقیه هم بخوره.پدیده ای به نام NOWقطعا همه now رو میشناسن ...یکی ازمحصولات شرکت zeit که توسعه دهنده ی nextjs هم هست . فعال کردن now تقریبا 20 ثانیه طول میکشه و بعد از اون هر بار که شما تغییری رو کامیت و پوش میکنی now یه نسخه پروداکشن از سایت شما بالا میاره و لینکش رو به صورت کامنت به انتهای کامیت تون اضافه میکنه ...لعنتی خیلی معتاد کننده ستبرای فعال کردنش کافیه  از ستینگ وارد تب اینتگریت بشید و now رو به پروژه تون وصل کنیدبعد از اون هر وقت که کد هاتون رو پوش کنین اگه مشکلی نداشته باشه در انتهاش همچین کامنتی اضافه میشه.به همین اسانی به همین خوشمزگیخب  اینجوری خیالمون از بابت خود وبسایت راحته ولی استوری بوک رو چجوری نگه داریم؟اولین راهی که به ذهنمون میرسه صفحات استاتیک گیت هابه پساستفاده از Github Pagesمیخوایم استوری بوکمون رو روی گیت هاب پیج بالا بیاریم پس اول نیازه که گیت هاب پیج رو فعال کنیم.برای این کار از ستینگ قسمت گیت هاب پیچ رو پیدا کنین  و فعالش کنینمن حال ندارم هر وقت که تغییری میدم بیام و استوری بوک رو بیلد بگیرم و فایل هاش رو روی این برنچ پوش کنم پس میریم برای خودکار سازی. برای شروع کتابخونه ی زیر رو نصب میکنیم و این قسمت هارو به فایل package.json اضافه میکنیمnpm install @storybook/storybook-deployerpackage.json &amp;quotscript&amp;quot:{
&amp;quotbuild-storybook&amp;quot: &amp;quotbuild-storybook -c .storybook -o .out -s ./public&amp;quot, 
&amp;quotdeploy-storybook&amp;quot: &amp;quotstorybook-to-ghpages&amp;quot,
}

&amp;quotstorybook-deployer&amp;quot: {
 &amp;quotgitUsername&amp;quot: &amp;quotGH Pages Bot&amp;quot,
 &amp;quotgitEmail&amp;quot: &amp;quothello@ghbot.com&amp;quot,
 &amp;quotcommitMessage&amp;quot: &amp;quotDeploy Storybook to GitHub Pages&amp;quot 
    },
حالا با زدن دستور npm run deploy-storybook اول استوری بوک بیلد میشه و بعد نسخه بیلد شده خودکار پوش میشه به ریپوزیتوری...این روش خیلی خوبه و جلو تر میبینین که میشه حتی اسن دستور رو هم سپرد به github action تا خودش اون رو جرا کنه و نیاز نباشه ما کاری کنیم . ولی مشکلی که داره اینه که همیشه فقط آخرین نسخه رو داریم و نمیتونیم تغییرات رو نگه داری کنیم . من دلم میخواد وقتی فایلی رو تغییر میدم یه نسخه از استوری بوک فعلی همراه اون کامیت ذخیره بشه . کمی گشتم و رسیدم به سرویس surge.sh . واقعا سرویس لذت بخشیه . حتما بهش سر بزنیناستفاده از surgeفرق surge با now اینه که surge فقط وبسایت های استاتیک رو ساپورت میکنه که خب ما هم میخوایم استوری بوک رو که استاتیکه هندل کنیم .. پس بریم ببینیم چطوریه!اول نصبش میکنیمnpm install --global surgeوقتی که داخل پوشه ی پروژه بودین مثل مثال زیر میتونین ازش استفاده کنینولی خب من دنبال خودکار کردنم.پس با کمی سرچ به یه اکشن خوب توی گیت هاب رسیدماگه وقتی داخل surge لاگین هستین دستور surge token رو بزنین بهتون توکن میده که میتونین ازش توی گیت هاب اکشن استفاده کنین .البته یه راه دیگه ه مبا استفاده از github hook داره که هنوز تستش نکردم ولی میتونین از اینجا دنبالش کنین.. کلا هدف از این نوشته ها اینه که روندی که طی کردم یادم بمونهکاری که الان میخوام بکنم اینه که فایل کانفیگ اکشنم رو تغییر بدم تا هر وقت تغییری رو پوش کردم اول پروژه رو بیلد و تست کنه . بعد استوری بوک رو بسازه و دیپلوی کنه روی github page و بعد یه نسخه از استوری بوک رو هم دیپلوی کنه روی surge و اسم دامنه ای که برای این کار استفاده میشه رو به صورت تابعی از شماره کامیت میسازم تا نسخه های متفاوت رو همزمان داشته باشم.و در انتها میخوام که اون آدرس url به صورت کامنت به آخر کامیت اضافه بشه که خب این قسمت آخرش رو بلد نبودم برای همین توی استک فلو پرسیدم و خیلی زود یکی پیدا شد که جواب رو بدونه. لینکش اینجاست  .بعدش هم که ساخت ایمیج از روی داکر فایل و اضافه کردنش به ریجستریه.شت گویی رو کم میکنم و میزارم باقی حرف هارو خود کد بزنه... البته این هنوزم جای کار داره ها ولی تا اینجا داره کار میکنه .بعدا باید برای برنچ های مختلف رول های مجزا بنویسم یا بین پوش و پول رکوئست تفاوت قائل شم و ...{بازم مثل همیشه نمیشه اینجا مثل آدم کد نوشت...درستش کنین دیگه} https://github.com/straxico/react-strix/blob/master/.github/workflows/config.yml نتیجه بعد از هر بار پوش کردن همچین صحنه ای هستش</description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Mon, 21 Oct 2019 01:37:38 +0330</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 13 (kiwi)</title>
                <link>https://virgool.io/@straxico/%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%BA%D8%A7%D8%B1%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86-13-kiwi-l7i8ldzrwa6l</link>
                <description>احتمالا نمیدونین kiwi چیه ... در بهترین حالت به فکر یه میوه ی موکتیه خوشمزه یا یه پرنده که نمیتونه پرواز کنه افتادین ... البته این kiwi ما خیلی بی ربط با پرواز نیست . شرکت kiwi.com یه شرکت فروش بلیط هواپیما هست که دولوپرهاش رو خیلی دوست داره و تا جایی که من فهمیدم عاشق پایتون و ریاکته . مدت کوتاهیه که این شرکت تصمیم گرفته کامپوننت هایی که ازش برای ساخت وبسایتش استفاده کرده رو به صورت یه دیزاین سیستم دربیاره و اپن سورس منتشرشون کنه. کارشون چند تا ویژگی داره که من خیلی خوشم اومده ازش .اول از همه این که از styled-components استفاده میکنن و برای استفاده ازش باید styled-components رو نصب کنیم که خب ما هم داریم از همین استفاده میکنیم . دوم این که نحوه ی کد نویسیش به نحوی هست که میشه خیلی راحت توسعه ش داد و اگه داخل سورسش بگردین میبینین که کار عجیبی نکرده و همه چی خیلی سر راست و قابل فهمهسوم این که به اون حالت اتمیک دیزاین ما خیلی نزدیکه و عملا هر کدوم از کامپوننت هاش یه اتم حساب میشه برای ماچهارم این که شاید بگید کامیونیتی قوی نداره ولی kiwi نیومده تکنولوژی جدیدی معرفی کنه و داره فقط برای styled-component کامپوننت های پایه رو میسازه که خب خود styled-component به قدر کافی کامیونیتی داره که خیالمون راحت باشه و به این هم باید توجه کنیم که این پروژه ی kiwi خیلی جدیده و هنوز به ریلیز 1.0.0 نرسیده . تیم توسعه ش که عملا کارمندای شرکت kiwi هستن دارن هر روز روش کار میکنن و تقریبا هفته ای 3 تا ریلیز جدید میدن . خوبیش اینه که برنامه ی مشخصی برای توسعه دارند که از اینجا میتونین ببینین. طبف این برنامه تا دو ماه دیگه ورژن 1.0.0 ریلیز میشه.پنجم این که kiwi هم برای React و هم برای React Native در حال توسعه هست . در کل اینجوریه که اینا اول کامپوننت رو توو sketch دیزاین میکنن .بعد نسخه ی React رو میدن و بعد نسخه ی React Native . وضعیت کامپوننت های منتشر شده هم از اینجا قابل مشاهده هست.میشه قسنگ دید هر کامپوننت الان در چه وضعی هست و تا کی باید منتظر بمونیم تا بیاد .میشه گفت دیگه تقریبا همه ی کامپوننت های اصلی آماده شده و کم کم میریم برای ریلیز 1.0.0ششم این که kiwi رو با flow نوشتن . که خب برای یه عده مزیت محسوب میشه و برای ما که پروژه مون تایپ اسکریپته خیلی خبر خوشحال کننده ای نیست. یه ایشو بهشون زدم و گفتن که توو برنامه شونه که خیلی زود تایپ ها رو هم منتشر کنن .بنابراین خیلی بی تایپ نمیمونیم . البته ما چون حال صبر کردن نداشتیم کل پروژه رو کلون کردیم و بردیمش روی تایپ اسکریپت با این خیال که از اینجا به بعدش رو خودمون توسعه میدیم ...ولی سرعت توسعه ی تیم kiwi اونقدر بالا بود که با خودم گفتم توو این پروژه بیخیال اون کلون بشم و kiwi رو از ریپوی خودش نصب کنیم و امیدوار باشیم تایپ ها زودتر برسه.هفتم این که همه ی کامپوننت ها تست داره و براشون storybook هم نوشته شده .کلا این پروژه حال میده برای این که کلون کنی و برای خودت یه اتمیک دیزاین شخصی باحال درست کنی ..میتونین استوری بوکش رو از لینک پایین ببینین. اگه خود سایت kiwi.com رو هم دیده باشین میبینین که کاملا همونه https://kiwicom.github.io/orbit-components/?path=/story/* هشتم این که از rtl پشتیبانی میکنه ... شاید بعضی جاها هنوز مشکل داشته باشه ولی چیزی نیست که نشه حلش کرد و در کل داخل تم گزینه ی rtl دیده شده و یه util برای rtl render داره .نهم این که بعضی از کامپوننت های قدیمیشون هنوز به صورت کلاس نوشته شدن ولی جدید هارو فانکشنال نوشتن . بهشون ایشو زدم و گفتن که کنم کم قدیمیا رو هم فانکشنال مینویسنیه توکن دیزاین برای تم هم داره که اونم سخت در دست توسعه و بهبود هست .. قابلیت ترجمه هم براش گذاشتن که من نیاز نداشتم و توی کلون خودم پاکش کردم ولی اینجا هست دیگه ...در کل همه چیزش خیلی برام دوست داشتنیه و نکته ی دیگه ای فعلا یادم نمیاد ...بریم که کل اتم های مورد نیاز پروژه مون رو با یه حرکت بسازیم .یادم رفت صفحه ی اصلی داکیومنتش رو معرفی کنم...اینه https://orbit.kiwi/ خب برای نصبش اینو میزنیم npm install @kiwicom/orbit-components
شت ...نصب شد ولی بدون تایپ اسکریپت عملا نمیشه باهاش کار کرد :|مشکل استفاده نداره ها ولی نمیدونی کدوم کامپوننت چه پراپ هایی میگیره و همش باید تب داکیومنت باز باشه.مثلا کامپوننت Text رو بخوای استفاده کنی یه همچین چیزی میشه. من از پراپ های element , size, type,weight استفاده کردماینا رو چون تایپ نداریم موقع وارد کردن هیچ هینتی بهم نداد ولی توی داکیومنتش همچین چیزی دارهیه راهش اینه که منتظر بمونیم خودشون تایپ بنویسن و تا اون موقع با داکیومنتش بریم جلو ..یه راهم اینه که اون کلون دست و پا شکسته مون رو فعلا بیاریم داخل و بعدن که تایپ ها  رسید با این جایگزینش کنیم.هومممم.یا که اصن پروژه مون رو ببریم روو فلو...اصن همزمان میشه فلو و تایپ اسکریپت فعال باشه؟زودی بر میگردم </description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Mon, 07 Oct 2019 02:25:05 +0330</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 12 (ci /cd با استفاده از github action)</title>
                <link>https://virgool.io/@straxico/%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%BA%D8%A7%D8%B1%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86-12-ci-cd-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-github-action-pmjq6ilnmk55</link>
                <description>خب این قسمت خیلی وابستگی به ریاکت نداره و برای خیلی از پروژه ها قابل استفاده ست . منم دواپس نیستم ولی در حد نیازم لازم دارم که کارامو خودکار کنم گیت هاب بعد از این که زحمت کشید و مارو تحریم کرد .اومد و github actions رو معرفی کرد.فرصت نشده بود باهاش کار کنم .بریم ببینیم چجوریاستپروژه مون رو که یادتونه روی گیت هاب گذاشته بودیم؟ حالا میخوایم یه سری کار باحال باهاش بکنیم .اول از همه عبارت github cicd رو سرچ کردم و به این لینک رسیدم.بعد از ثبت نام وقتی وارد صفحه ی پروژه شدم دیدم یه تب actions هم اضافه شدههمین که واردش میشید کلی کانفیگ آماده برای انواع کارها میبینید.ما از Node.js شروع میکنیم .وقتی که انتخابش کردم کانفیگ زیر رو نشونم دادچیزی که معلومه اینه که داره این کار هارو روی یه سیستم عامل اوبونتو انجام میده . اومده و 3 نسخه ی متفاوت node رو ریخته توی matrix که نمیدونم چیه .در ادامه هم دستور های npm install , npm run build و npm test رو اجرا کرده ... خب همین رو سیو میکنیم ببینیم چی میشهبعد از سیو وارد تب اکشن شدم و دیدم اون بقل برام 3 نسخه ی مختلف node رو گذاشته که خب معنی matrix هم فهمیدیم . فرایند روی همه ی نسخه ها نا موفق بود ...یکیش رو باز کردم ببینم داستان چیهنصب پکیج ها و بیلد گرفتن پروژه موفق بود ولی چون هیچ تستی وجود نداشت jest ارور داده بود ... رفتم توی package.json  و جلوی دستور test فلاگی که حین ارور پیشنهاد داده بود رو اضافه کردم ... از توی فایل تنظیمات اکشن هم فقط node 12.x رو گذاشتم که بمونه درنهایت همه چیز میزون بودولی خب اینا به چه دردمون میخوره؟شما وقتی یه تغییری توی کد ها میدید و تغییرات رو پوش میکنید , گیت هاب میاد و پروژه رو بیلد میکنه و تست هارو هم اجرا میکنه و اگه خطایی وجود داشته باشه بهتون اطلاع میده  . میتونید خیلی کارای دیگه رو هم باهاش قاطی کنین .مثلا چی؟توی پست های قبلی یه کم در مورد داکر صحبت کردیم .و برای پروژه مون داکرفایل ساختیم .حالا من میخوام به کمک همین قابلیت های جدید گیت هاب بیام و کاری کنم که بعد از هر باری که من تغییراتم رو پوش میکنم روی گیت هاب ,به طور خودکار فایل ایمیج برام ساخته بشه و روی رجیستری که گیت هاب در اختیارمون گذاشته قرار بگیره..در مرحله ی بعد هم این فایل ایمیج رو متصل کنم به سرویس هایی مثل فندوق تا هروقت که من تغییری رو پوش میکنم به طور خودکار سایتم آپدیت بشه.خب از کجا شروع کنیم؟توی تب اکشن یه workflow جدید میسازیم و اینبار Docker image رو انتخاب میکنیم..بدون تغییر همون رو سیو میکنم و میبینم که همه چیز داره درست کار میکنه :D ...لعنتی خیلی ساده ستالان با هربار کامیت کردن یه بار اون کانفیگ node اجرا میشه و یه بار هم داکر.و خب الان جفتشون موفق بودن . ولی باید دقت کنین که این کارها روی یه سیستم موقت داره انجام میشه .یعنی اون فایل ایمیجی که ساخته میشه عملا جایی ذخیره نمیشه . خب حالا چیکار کنیم؟چجوری فایل ایمیج رو منتقل کنیم به ریجستری گیتهاب؟ برای کار با اکشن خیلیا اومدن و خیلی کانفیگ های آماده ساختن که میتونین برای کارهای مختلف ازشون استفاده کنین . لیستشون رو از اینجا میتونین ببینین.مثلا یکی اومده و وصلش کرده به تلگرام یعنی اگه بعد از پوش کردن کدها اروری وجود داشته باشه داخل تلگرام براتون نوتیفیکیشن میاد . باحاله ولی به دردمون نمیخوره .واسه دردمون یکی اومده و این رو نوشته اسمش رو هم گذاشته publish docker که میشه راحت ازش استفاده کرد ولی ما چرا خودمون ننویسیم؟کاری نداره کهاگه یه نگاه به صفحه ی package توی github بندازین همچین چیزی میبینینخب ما هم بر اساس همین میایم و کانفیگمون رو مثل زیر تغییر میدیمفقط یه نکته وجود داره .مقدار پسورد رو من اومدم و داخل یه سکرت تعریف کردم . سکرت ها رو میتونین توی قسمت تنظیمات ریپوزیتوری پیدا کنین و ست کنین . ولی مشکلی که وجود داشت این بود که بعد از اجرا همچین خطایی گرفتم بعد از کمی جست و جو فهمیدم که باید به جای پسورد یه توکن تعریف کنم که اجازه ی نوشتن داشته باشه .پس رفتم اینجا و یه توکن تعریف کردم و اون توکن رو توی سکرت ها جایگزین پسورد کردم.ایندفه اکشن بدون خطا اجرا شد و توی قسمت package ها هم ایمیجمون اضافه شدحالا میتونیم این ایمیجمون رو توو جاهای مختلف مثل فندوق استفاده کنیمفندوق رو توی شماره ی بعدی میگم .فقط به این نکته توجه کنین که این مراحل باید پشت سر هم باشه یعنی اگه اون قسمت بیلد و تست ناموفق بود دیگه قسمت داکر اجرا نشه ..اینارو بعدا درست میکنیم ..فعلا بریم سروقت فندوق </description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Sun, 29 Sep 2019 19:56:39 +0330</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 11 (docker)</title>
                <link>https://virgool.io/@straxico/%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%BA%D8%A7%D8%B1%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86-11-docker-jpzcmoq0erog</link>
                <description>قشنگ ترین قسمت کد نویسی بزای من اونجاست که ببینم کدی که نوشتم همه جا مثل کامپیوتر خودم بی نقص اجرا میشه .یه زمانی این مثل رویا بود ولی ما الان به لطف گو داکر رو داریم.بریم که پروژه مون رو داکرایز کنیم.داکر اینجوری کار میکنه که شما باید از پروژه تون یه فایل ایمیج بسازین . یه چیزی توو مایه های فایل iso یی که برای سیستم عامل ها داشتیم و هر جا که داکر باشه میشه اون فایل ایمیج رو درست همونجوری که روی سیستم خودتون اجرا میشد اجرا کرد.فایل ایمیج شامل همه ی فایل هاییه که برای اجرای پروژه تون لازمه ..برای نمونه ی ما این فایل شامل node,npm, همه ی پکیج های استفاده شده در پروژه و ... هست که با توجه به نوع پروژه حجم فایل ایمیج هی بزرگ میشه ..یه سری ایمیج های آماده وجود داره که ما برای ساخت ایمیج های خودمون از اون ها استفاده میکنیم .مثلا ایمیج node یا ایمیج پایتون ... شما میتونین این ایمیج هارو از اینجا ببینین. برای هر برنامه ای یه عالمه ایمیج با کانفیک ها و ورژن های متنوع موجوده که بسته به نیاز باید ایمیج مناسب خودتون رو پیدا کنین . مثلا ممکنه یکی برای اجرای پایتون بیاد و از ایمیج یک سیستم عامل اوبونتو کامل استفاده کنه و حجم ایمیجش بشه یه گیگ ..یکی دیگه هم از یه ایمیج خلاصه استفاده کنه و کلا با 50 مگ داستانو ببنده .ایمیج هایی که من برای پروژه های nextjs خودم دیدم حدود 150 تا 200 مگ بودن.خب .. و اما ایمیج رو چطور بسازیم؟داکر برای ساخت فایل های ایمیج از فایلی به نام Dockerfile استفاده میکنه .این فایل فقط شامل چند خط دستوره و حجمش یکی دو کیلوبایته.توی این فایل تعریف میکنیم که پروژه مون به چیا نیاز داره و چطور باید چیکار کنه ساخت  Dockerfile  برای پروژه nextjsوقتی کدش رو ببینین میفهمین که چه ساده ست ...ما اول میگردیم و یه فایل ایمیج مناسب برای اجرای node پیدا میکنیم. یادتون باشه که نیاز نیست دانلودش کنین , ما فقط اسمش رو میخوایم . همه ی اسم هایی که اینجا میبینین قابل استفاده هستن . من از mhart/alpine-node میخوام استفاده کنم . داکرفایلمون این شکلی میشهاول اومدم و گفتم که بیا و از ایمیج mhart/alpine-node استفاده کن. وقتی از این ایمیج استفاده میکنم یعنی node, npm و... نصبه . میگم که برو توی پوشه ی app .حالا هرچی فایل توی روت پروژه ی من هست رو کپی کن توی پوشه ی app .دستور npm run install رو اجرا کن تا پکیج ها نصب بشن .بعدش بیا برو روو حالت پروداکشن و. برنامه رو بیلد کن . اجازه دسترسی به پورت 3000 رو بده و در نهایت node server.js رو اجرا کن.خب خیلی ساده بود. اگه دقت کنین من اول پکیج هارو نصب کردم و بعد اومدم حالت پروداکشن رو فعال کردم .پس الان پکیج های حالت dev هم نصب شده . اگه نیازی بهشون ندارین میتونین اون خط رو ببرید بالاترخب ما داکرفایل هم ساختیم حالا چجوری از این برسیم به ایمیج؟ و اصلا با اون ایمیج چیکار کنیم؟شما دیگه لازمه که داکر رو نصب کنین.برید توو این سایت دانلود و نصبش کنین.برای ساخت ایمیج کافیه وقتی توی روت پروژه هستین این دستور رو توی  ترمینال بزنین.با این کار فایل های لازم رو دانلود و اجرا میکنه.شما به یه فضایی لازم دارین که فایل های ایمیج رو نگه داری کنه که اصطلاحا بهش رجیستری میگن وقتی داخل داکر لاگین میکنین براتون یه چی میسازه و همه چی رواله ..حالا بعدا میریم روو گیت لب و اونجا قشنگ تر جا میافته این چیزا..فعلا هدف آشنایی و ساخت dockerfile بود.docker build --rm -f &amp;quotDockerFile&amp;quot -t imagename:latest .بار اول شاید یه کم طول بکشه .ولی بیلد های بعدی خیلی سریع اتفاق میافته و همه چیز رو کش میکنه.فکر کنم ایده ی بدی نباشه این رو روی فندوق هم دیپلوی کنیم .جلو تر میرسیم بهش..دلم میخواد کد بزنم ..چرا کانفیگ تموم نمیشه؟کد ها اینجاست https://github.com/straxico/react-strix </description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Fri, 27 Sep 2019 04:29:33 +0330</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 10 (express)</title>
                <link>https://virgool.io/@straxico/%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%BA%D8%A7%D8%B1%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86-10-express-duzikj1muksr</link>
                <description>خب تا اینجا ما اکثر کانفیگ هارو انجام دادیم . برای این که در آینده دستمون باز تر باشه من ترجیح میدم از express برای سرو کردن سایتم استفاده کنم.سایت nextjs توضیحات و مثال های کاملی برای اضافه کردن express به پروژه داره ..حالا ما هم قدم قدم میریم ببینیم چجوریهقاعدتا اولین قدم نصب کردن express هست .پس دستور زیر رو وارد میکنیم npm install express --saveما تا الان برای اجرای پروژه دستورات npm run dev یا npm start رو میزدیم که با زدن این ها اسکریپت های زیر اجرا میشدناز الان به بعد من میخوام که با زدن این دستورات node بیاد و یه فایلی که من توش express رو تعریف و استفاده میکنم اجرا بشه . اسم اون فایل رو میزارم server.js و توی روت پروژه قرارش میدم .. server.js رو جلوتر با همدیگه میسازیمش ....پس الان اسکریپت هام رو مثل زیر تغییر میدم تا با زدن npm run dev یا npm start به جای سرور nextjs سرور خودمون اجرا بشه. البته میتونین تنظینات بیشتری رو هم بزارین مثلا حالت پروداکشن رو برای start بزارین که من فعلا بهش نیاز ندارم ..بعدا میفهمین چراخب بریم برای ساختن فایل server.jsساده ترین حالت فایل سرور چیزی شبیه به این فایلهاول express و nextjs ایمپورت شدن و بعد پورت و حالت پروداکشن یا دولوپ مشخص شده .بعد یه سرور سرو شده که تمامی درخواست های رسیده رو پاس میده به nextjs.حالا شما میتونین بعد از زدن دستور npm run build دستور npm run dev رو بزنین و پروژه تون رو با express بالا بیارین .توو نسخه ی جدید next خیلی از کمبود ها رو پوشش داده و نیاز برنامه نویسا به express کمتر شده .مثلا داینامیک روتینگ هارو بهتر از قبل هندل میکنه ولی باز من express رو ترجیح میدم ..اینجا شما میتونین پروکسی تعریف کنین, میتونین مقادیر کوکی ها و هدر هارو چک کنین و بر اساس اون کاری انجام بدین .. میتونین فایل های استاتیک رو از جای دلخواهتون سرو کنین  و میتونین از کلی از پلاگین هایی که برای express نوشته شده توی برنامه تون استفاده کنین.من پروژه رو روی گیت هاب گذاشتم و قدم به قدم داریم میریم جلو..لینکش اینجاست https://github.com/straxico/react-strix قدم بعدی داکرایز کردن پروژه هست</description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Fri, 27 Sep 2019 03:36:41 +0330</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 9 (git)</title>
                <link>https://virgool.io/@straxico/%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%BA%D8%A7%D8%B1%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86-git-stwa6ioawqed</link>
                <description>تا اینجا کلی تنظیم و کانفیگ انجام دادیم و دیگه وقتشه که git رو بیاریم وسط ..البته میشد و باید از همون اول گیت رو راه مینداختیم ولی خب من دلم میخواست اولین کامیتمون یه کم پر و پیمون باشهواسه کار کردن با گیت لازم نیست چیزی بلد باشی ..فقط کافیه گیت رو از آدرس زیر نصب کنین و باقیش رو بسپارین به vscodehttps://git-scm.com/downloadsخب بعد از نصب گیت میریم توی vscode و از منوی کنار روی source control کلیک میکنیمخیلی واضح میگه هنوز چیزی نیست و با زدن + گیت به پروژه اضافه میشهبعد از انجام این کار شما با همچین صفحه ای روبه رو میشیناین صفحه میگه شما بیشتر از 5000 فایل دارین که کامیت نشده ..در حالی که من به زور تعداد فایل هام به 20 تا میرسه...این فایل ها مربوط به گتابخونه هایی هست که نصب کردیم و یا فایل هاییه که موقع build نکست میسازه ...گیت این امکان رو داره که این نوع فایل هارو نادیده بگیره ..برای این کار در روت پروژه یه فایل به نام .gitignore بسازین و پوشه ها و فایل هایی که نمیخواین و تغییراتشون براتون مهم نیست رو بزارین توشبعد از ایگنور کردن دو تا پوشه میبینین که تعداد تغییرات شد 12 تا.برای این که این تغییرات ثبت بشه کافیه توی کادر بالا یه متن در مورد تغییرات بنویسین و روی اون تیک کلیک کنین تا تغییرات کامیت بشه. خب ما الن یه گیت داریم که فقط روی کامپیوتر خودمونه و به جایی وصل نیست ..بهتره این پروژه رو اپن سورس کنیمش و فایل هارو روی گیت هاب منتشر کنیم .برای این که یه گیت محلی رو به گیت هاب وصل کنیم میتونستیم کارای دیگه ای هم بکنیم ولی الان اول یه ریپوزیتوری با اسم react-strix روی گیت هاب میسازم و بعد توی vscode کد ctrl+shift+p رو میزنم و داخلش مینویسم git add remote اینتر میکنم و نام ریپو و url ریپو رو که از gthub رفتم وارد میکنم و این دوتا به هم وصل میشنوقتی روی اون علامت پایین کلیک میکنین یه پنجره باز میشه و بعد از لاگین شدن داخل گیت هاب فایل هاتون پوش میشه ..به همین سادگی ...حالا میتونین برین توی لینک گیت هابتون و فایل هاتون رو ببینینالان آدرس گیت ما اینه https://github.com/straxico/react-strix اگه یه نگاهی بندازین میبینین که پوشه های خالی کامیت نشده ..هر وقت که داخل این پوشه ها فایلی قرار بدیم خود به خود وارد گیت میشه .از حالا به بعد هر تغییری که میدیم همراه با کامیت پوش میکنیم روی سرور ..جلوتر که بریم دو تا شاخه ی جدا درست میکنیم و با گیت بیشتر کار خواهیم داشت ..فعلا همین بسه مونهاسمشو گذاشتم react-strix ...دوسش دارم </description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Sat, 07 Sep 2019 05:20:02 +0430</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 8 (resolve import)</title>
                <link>https://virgool.io/@straxico/%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%BA%D8%A7%D8%B1%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86-resolve-import-ytidvv3wz8lq</link>
                <description>یکی از دردسر های کار با ریاکت اینه که به طور دیفالت برای ایمپورت کردن فایل ها باید آدرس دهی رو یا از روت پروژه و یا پوشه ای که داخلشی شروع کنی .بنابراین ما گاهی شاهد همچین ایمپورت هایی هستیمimport Button from &#x27;src/components/atom/buttom&#x27;و یا import Button from &#x27;../../../../atom/buttom&#x27;در حالی که دلم میخواد بدون توجه به این که کجا هستم اینجوری ایمپورت کنم import Buttom from &#x27;atom/buttom&#x27;برای این کار لازمه تا تنظیمات تایپ اسکریپت  رو عوض کنیمبا توجه به پوشه هایی که قبلا ساختیم فایل tsconfig.json رو به شکل زیر در میاریم ... بخشی که به فایل اضافه شده رو علامت زدمالان تایپ اسکریپت کد مارو میشناسه ولی eslint نمیتونه کار کنه و ارور میده که ایمپورت ها درست نیستبرای این که درست شه باید تنظیمات eslint رو کمی دستکاری کنیم . دوتا روش داریم یکی این که مجدد توی تنظیمات eslint بیایم و path هارو معرفی کنیم و یا کاری کنیم که eslint تنظیمات تایپ اسکریپت رو بخونه که من دومی رو ترجیح میدم ..برای دومی لازمه که یه کتابخونه نصب کنیم....! پس اینو نصب میکنیمnpm install --save-dev eslint-import-resolver-typescriptو حالا کافیه ستینگ زیر رو توی eslintrc.json اضافه کنیمو حالا به سادگی میتونیم ایمپورت هامون رو انجام بدیم.برای نمونه من دوتا فایل ساختم و یکی رو داخل دیگری ایمپورت میکنماینجوری import هامون تمیز هستن و موقع ایمپورت کردن با نوشتن atom تمامی فایل های قابل ایمپورت نمایش داده میشن و کار کردن خیلی ساده میشه ...جلوتر میبینین که با نصب افزونه ها حتی دیگه نیاز به ایمپورت هم نخواهیم داشت و فایل هایی که در کد استفاده میکنیم خودکار ایمپورت میشن.اما بزارین یه قدم دیگه هم بریم جلوتر.یعنی چی؟ما اگه این فایل رو داخل یه تست ایمپورت کنیم چی؟ آیا jest هم تنظیماتمون رو میشناشه؟خب من یه فایل داخل تست ایمپورت کردم و میبینید که تست فیلد شد.خب باز برای این مشکل دو راه وجود داره که من راه دوم رو انتخاب میکنم.(این که تنظیمات از یه جا صورت بگیره بعدا خیلی بهمون کمک میکنه). پس پکیج زیر رو نصب میکنیمnpm install --save-dev jest-module-name-mapper در روت پروژه یه فایل برای تنظیمات jest به نام jest.config.js میسازیم و مثل زیر کانفیگش میکنیم.کافیه یه بار vscode ببندین و باز کنین و ایندفه میبینین که تست پاس شدهآپدیت:علاوه بر این روش یه روش بهتر هم هست که برای من تا همین امروز صبح جواب نمیدادکافیه پکیج زیر رو نصب کنین  npm install --save-dev ts-jestتنظیمات زیر رو در فایل jest.config.js اضافه کنین و در تنظیمات tsconfig.json  مقدار preserve رو به react تغییر بدیدمن چون این تغییر رو انجام نداده بودم برام کار نمیکرد و نمیدونستم مشکلم از کجاست ..امروز صبح به طور اتفاقی در این ایشو مشکل و راه حل رو پیدا کردم و کلی خوشحال شدم ...بازم آپدیت: عاقا همون روش اول بهتره انگار https://github.com/zeit/next.js/issues/8663 تقریبا میشه گفت که تموم شد.ولی وقتی استوری بوک رو هم نصب کنیم باز لازمه که براش کمی کانفیگ انجام بدیم که اون رو بعدا انجام میدیم</description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Sat, 07 Sep 2019 04:27:42 +0430</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غار نشینان 7 (ساختار پوشه ها)</title>
                <link>https://virgool.io/@straxico/%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%BA%D8%A7%D8%B1-%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86-%D8%B3%D8%A7%D8%AE%D8%AA%D8%A7%D8%B1-%D9%BE%D9%88%D8%B4%D9%87-%D9%87%D8%A7-a9ipclbl5hkf</link>
                <description>خب ... یه جورایی میشه گفت هیچ قانونی برای ساختار پوشه ها وجود نداره و شما میتونین هر طوری که دوست دارین کدهاتون رو بنویسی. میدونیم که یه برنامه ی ریاکت ترکیبی از کامپوننت هاست ...هر کامپوننت هم تعدادی فایل js , فایل تست , فایل استایل, فایل استوری ,فایل ترجمه و... ممکنه داشته باشه. وقتی پروژه هارو نگاه میکنی میبینی که از دو تا شیوه ی کلی استفاده میکنندر شیوه ی اول توی روت پروژه یه پوشه برای تست ,یه پوشه برای استوری , یه پوشه برای ترجمه , یه پوشه برای استایل و در نهایت یه پوشه برای کامپوننت ها درست میکنن ...حالا متناسب با هر پوشه و فایل جدیدی که برای کامپوننت ساخته میشه پوشه ها و فایل هایی هم داخل استایل, تست,ترجمه و استوری میسازن.این شیوه خوبیش اینه که همه ی استایل ها داخل یه پوشه هستن یا همه ی تست ها داخل یه پوشه هستن. بدیش هم اینه که شما وقتی با یه کامپوننت کار داری بایداجزای مختلفش رو در جاهای مختلف دنبالش بگردی که اصلا به نظرم جالب نیست.در شیوه ی دوم هر فایلی که مربوط به یه کامپوننت هست همراه همون کامپوننت و توی همون پوشه نگه داری میشه ..اینجوری اگه بخوای کامپوننتی رو ادیت کنی همه ی فایل های مربوط به اون رو میتونی یه جا ببینی و ویرایش کنی و یا اگه بخوای محل قرارگیری کامپوننتی رو عوض کنی کافیه همین یه پوشه رو جابه جا کنی. من این شیوه رو بیشتر دوست دارم.ما چون داریم از next.jsاستفاده میکنیم مجبوریم پوشه ی page و static رو داشته باشیم ..البته next.js قراره در نسخه های جدیدش این اجازه رو به ما بده که بتونیم این پوشه هارو جابه جا کنیم. پوشه ی page رو که قبلا دیده بودید ...پوشه ی static هم برای نگه داری فایل های استاتیک کاربرد داره ..هر فایلی مثل yourfile.jpg که داخل این پوشه قرار بگیره از طریق آدرس زیر قابل دسترسه 127.0.0.1:3000/static/yourfile.jpgالبته اگه شما از express استفاده میکنین میتونین فایل های استاتیکتون رو از هر جایی که دوست دارین هندل کنینیه پوشه به اسم src درست میکنیم تا سایر پوشه های پروژه رو داخلش بسازیم . پس تا اینجا ما داخل روت پروژه مون همچین ساختاری داریمپوشه vscode شامل تنظیمات vscode هست. پوشه ی node_module هم شامل کتابخونه هایی هست که ما نصب کردیم. پوشه ی next هم بعد از این که پروژه رو بیلد میگیرید به صورت خودکار ساخته میشه و شامل بیلد ها و... هست. اون فایل های زیر هم تنظیماتی هستن که قبلا دیدیمشونو اما در ادامهما برای پروژه مون واقعا به چه پوشه هایی نیاز داریم؟پوشه ی apiیه بخش زیادی از یه پروژه ی فرانت استفاده از api هایی هست که بک اند برامون ساخته ..این که بخوایم مدام در وسط کد api هارو صدا بزنیم کار قشنگی نیست و من ترجیح میدم توابعی برای کار با api هام بسازم و اونارو توی پوشه ی api نگه داری کنم..و اگه قراره تنظیمات خاصی براشون در نظر بگیرم یه بار این کار رو انجام بدم..شاید شما دلتون نخواد همچین پوشه ای داشته باشین و حس کنین نهایتا لازم دارین که یه فایل به اسم api داشته باشین ...تجربه ی شخصی میگه اگه یه روز حس کردی لازم داری یه فایل به اسم api یا rout یا هر چی داشته باشی... به زودی  و با گسترش پروژه ت لازم میشه اون فایل رو به چند تا فایل ریز تر بشکونی.پوشه ی contextما برای مدیریت استیت هامون داریم از context ها استفاده میکنیم  برای مدیریت راحت تر کانتکست ها بهتره اونارو یه جا نگه دارید ..کجا بهتر از پوشه ای به نام context? پوشه ی  typeوقتی که دارید از تایپ اسکریپت استفاده میکنید تایپ ها خیلی کمکتون میکنن. اگه تایپی رو داخل فایلی با فرمت .d.ts بزارید . در کل پروژه بدون نیاز به ایمپورت میتونین از اون تایپ استفاده کنین .اینقابلیت خیلی کمکتون میکنه. بنابراین برای قسمت های مختلف بهتره که چند تا فایل برای نگه داری تایپ ها داشته باشیم و اونارو توی پوشه ی type قرار بدیمپوشه ی hookنسخه ی جدید react بهمون اجازه میده تا کاستون هوک هایی بسازیم که کاربرد های متنوعی دارند و جاهای مختلفی از پروژه بتونیم از اونا استفاده کنیم ما این هوک هارو در پوشه  hook نگه داری میکنیمپوشه ی utilبعضی از فانکشن ها هستند که کارهایی رو برای ما انجام میدن و ما دوس داریم در سراسر پروژه هر جا که لازم شد بتونیم ازشون استفاده کنیم .چنین فانکشن هایی رو توی پوشه ی util نگه میداریم ...میپرسی مثل چی؟ مثل فانکشن تبدیل عدد به حروف.پوشه ی constantهر پروژه ای مجموعه ای از مقادیر ثابت داره که میتونیم اینجا نگه داریشون کنیم و یا اگه حس میکنین مقادیرتون کمه میتونین موقتا توی یه فایل و در پوشه ی util نگه داریدشونو اما پوشه ی componentاول اینو بگم که ما دولوپر هایی هستیم که مجبوریم موقع تنظیم express  نقش بک اند هارو بازی کنیم , موقع تنظیم چرخه ci\cd و دیپلوی و nginx نقش دواپس هارو بازی کنیم و موقع طراحی کامپوننت ها هم گریزی به دیزاینر ها بزنیم. اینو نگفتم که بگم خیلی خفنیم ...اینو گفتم که بدونین خیلی کم و در حدی که لازم مون میشه از سایر چیزا میدونیم .. پس قطعا من توی خیلی از قضایا همه ی مسیر هارو نرفتم و فقط قدر مسیری که تا اینجا طی کردم دانش دارم.اتمیک دیزاین  یا atomic designخیلی خلاصه میگه که شما برای طراحی یک سایت باید اون رو به قسمت های کوچیکی که قابلیت استفاده ی مجدد داشته باشه بشکونین یک سایت از قسمت های مختلفی تشکیل شده که میشه اون هارو به اجزای ریز تری تقسیم کرد .اسم کوچک ترین اجزا رو atom گذاشتن که شامل دکمه ها, آیکن ها , input, select و ... میشهترکیب این اجزای کوچک تر منجر به تشکیل قسمت های بزرگتری میشه که بهش میگن مولکول ...مثلا شما اگه هدر یک سایت رو نگاه کنی شامل منوی جستجو , ناوبار, لوگو و... هست . حالا خود منوی جستجو شامل یک input و یک button هست .شما ممکنه این منوی جستجو رو علاوه بر هدر در منوی کناری صفحات دیگر هم استفاده کنین بنابراین بهتره خود منوی جستجو رو هم در جایی جدا نگه داریم . و اگه لازم شد دوباره ازش استفاده کنیممیتونین در این لینک بیشتر در مورد اتمیک دیزاین بخونین  http:/w.sotouch.on.ca/a/c%20gn.pdf atom,molecule,organism,templateو توی هر کدوم از این پوشه ها پوشه هایی متناسب با اسم کامپوننت ها ساخته میشه که شامل فایل های تست و استوری و ... هست.این سیستم چند تا چیز رو به ما دیکته میکنههیچ ایمپورتی از لایه های بالاتر به لایه های پایین تر نباید داشته باشیم.لایه ی اتم ها نباید لاجیک وابسته ای داشته باشه این که اسمشون چیه اصلا مهم نیست بلکه ساختارشون مهمه ..شما میتونین از اسم های دیگه ای مثل element,component,module,layout استفاده کنینما فقط توی اتم ها اجازه داریم از المان هایی مثل &lt;button&gt; &lt;input&gt; &lt;select&gt; &lt;a&gt;  و ... استفاده کنیماز پیچیده نوشتن اتم ها جلوگیری کنین و سعی کنین خوب داکیومنتشون کنینبا گذشت زمان احتمالا باز هم این ساختار کمی تغییر کنه ولی فعلا من این رو دوست دارمدر انتها این رفرنس ها هم ببینین بد نیستhttps://cheesecakelabs.com/br/blog/atomic-design-react/https://github.com/Rulox/react-atomic-structurehttps://github.com/danilowoz/react-atomic-designhttp://ubie.io/atomic-design/خب توی قسمت بعد ایمپورت هارو خوشگل میکنیم و git رو هم میاریم وسط</description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Fri, 06 Sep 2019 22:16:03 +0430</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 6 (تست  نویسی با jest )</title>
                <link>https://virgool.io/coderlife/%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%BA%D8%A7%D8%B1%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86-6-%D8%AA%D8%B3%D8%AA-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%87%D9%85%D9%87-%DB%8C-%D8%AF%D8%A7%D8%B1%D9%88-%D9%87%D8%A7%DB%8C-%D8%AE%D9%88%D8%A8-%D8%AA%D9%84%D8%AE-%D9%87%D8%B3%D8%AA%D9%86%D8%AF-txdvvhqre9f4</link>
                <description>اصلا به قیافه ی من میخوره تست نویس باشم آخه؟من تا حالا نتونستم با نوشتن تست ارتباط درستی برقرار کنم و هنوز نمیدونم snapshot یا mock چی هستن ..در کل من تابع نیازم .. میپرسی کی تست لازمم شد؟خب من نیاز به یه تقویم برای پروژه م داشتم که هم شمسی ساپورت کنه و هم میلادی.که با تقویم کیارش آشنا شدم https://github.com/Kiarash-Z/react-persian-calendar-date-picker یه تقویم خیلی خوب و سر راست بود. منتها من پروژه م تایپ اسکریپتی بود و باید میلادی رو هم ساپورت میکردم و خیلی هم تجربه ی زیادی نداستم ...البته هنوزم ندارم ... دیدم کیارش یه فایل تست داره و چون برای فانکشن هایی که استفاده کرده بود تست نوشته بود و تست ها مقایسه ی اعداد با هم بود به سادگی از کد ها میشد فهمید که داره چطور کار میکنه ...دیدن اون تست ها بهم کمک کرد تا ساختار کد رو بهتر بفهمم و خیلی ساده بتونم بهش میلادی رو هم اضافه کنم ...البته چون میخواستم دو تا ماه رو کنار هم نشون بدم کلی گند زدم توو کد تمیز کیارش و روم نمیشه اصلا پابلیکش کنم ..یه ریفکتور اساسی لازم داره .. بگذریم ... خلاصه من با تست اونجا آشنا شدم و تست هایی که تا الان ازشون استفاده کردم همه شون توابع pure بوده و تا حالا برای کامپوننت تست ننوشتم. فعلا برای همون نیاز jest رو نصب میکنم تا ببینیم در آینده چی بر سرمون میادنصب jest کاری نداره .اینو میزنیnpm install --save-dev jestبرای نصب افزونه ی vscode هم بعد از ctrl+shift+p اینو میزنیext install orta.vscode-jestخب حالا یه فایل تست میسازیم ..فایل تست با اسم .test.tsx تموم میشهاولین تستمون میگه اگه 1+2 مساویه 3 بود تست رو پاس کن که خب همیشه 1+2 میشه 3 و تست پاس میشه ...بعد از نصب افزونه میبینین که اون پایین jest با یه تیک ظاهر شده یعنی همه ی تست ها روال هستن ... یه تنظیم داره که داخل فایل setting.json میتونین مشخص کنین هروقت vscode رو باز میکنین خودکار تست هارو اجرا کنه ...بگذریم ..میبینین که چند تا ارور داریم ...داستان اینه که ما چیزی ایمپورت نکردیم و تست رو نمیشناسه..اما چرا کار کرد؟ نمیدونم ...باید پلاگین مربوط به eslint رو برای jest نصب کنیمnpm install --save-dev eslint-plugin-jestو بعد &quot;plugin:jest/recommended&quot;  رو به لیست extends های کانفیگ eslint اضافه کنیم و توی قسمت env هم &#x27;jest/global&#x27; رو تعریف میکنیمخب ارور هامون هم رفت..البته اون ارور وسطی که واسه تایپ اسکریپته نرفته...میگه که فایلت باید یه ورودی یا خروجی داشته باشه ... ماست نباشه در واقع که خب تفایل ما ماسته و مهم نیست جلو تر وقتی خواستیم resolve ایمپورت رو هم راه بندازیم باز لازمه که بیایم سروقت تنظیمات jest ..الان فعلا jest اگه تستی ببسنه اجرا میکنه و در صورت لزوم ارور میده توی فایل package.json هم یه  اسکریپت تست براش ست میکنیم .کافیه توی قسمت scrips اسن رو اضافه کنیم &quot;test&quot;: &quot;jest&quot;بزار یه بار هم اجراش کنم خیالم راحت شهیه کم جلوتر که بریم حتما  snapshot یا mock  رو هم یاد میگیرم و این پروژه رو پر تست جلو میبرم...یکی از خوبی های نوشتن اینه که قسنگ معلوم میشه چیو بلد نیستی...خوشم اومدایشالا تست هاتون همیشه پاس شه ...فعلا</description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Mon, 02 Sep 2019 04:53:22 +0430</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 5 (تمیزکاری با eslint و prettier)</title>
                <link>https://virgool.io/@straxico/%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%BA%D8%A7%D8%B1%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86-5-%D8%AA%D9%85%DB%8C%D8%B2%DA%A9%D8%A7%D8%B1%DB%8C-oi6e3daa6cu8</link>
                <description>خب ما برای تمیزکاری کد ها از eslint و prettier استفاده میکنیم اینا چه تفاوتی با هم دارن؟خیلی ساده بخوام بگم اینه که prettier فقط از لحاظ زیبایی کد رو ادیت کاری میکنه و تنظیمات محدود تری داره . مثلا تعداد اسپیس های هر لول چند تا باشه یا مثلا از &quot; استفاده بشه یا &#x27; یا مثلا در آخر جملات ; قرار بگیره یا نهدر طرف مقابل eslint خیلی گسترده تر و حرفه ای تر کار میکنه و دستورات مختلفی رو ساپورت میکنه مثلا این مثال رو نگاه کنیدconst mehran=(value)=&gt;{
    if(value){
        return true
    }else{
        return false
    }
}
حالا eslint میاد و این کد رو تبدیل میکنه بهconst mehran = value =&gt; {
    if (value) {
        return true;
    }
    return false;
};اینجا چون داخل if ما ریترن داشتیم و بعدش فقط else بود که دیدین که else رو برداشت . این دو تا کد جفتشون یه کار رو دارن انجام میدن ولی دومی خلاصه تر و سر راست تره ..  eslint ساختار کد رو متوجه میشه و بهینه میکنه و همینه که کلی قدرتمندش میکنه.یه مثال دیگه بخوام بزنم وقتیه که شما یه متغیر رو از نوع let تعریف میکنی ولی جایی توی کد مقدار اولیه ش رو تغییر نمیده ..eslint میاد و خودش اون متغیر رو تبدیل به const میکنهخب حالا چجوری نصبشون کنیم ؟راستش خیلی مهمه که برای eslint چه rule هایی در نظر میگیرین ...چون eslint بر اساس rule ها میاد و کدتون رو تمیز میکنه و بر اساس اونا بهتون خطا میده ..بعضی از این rule ها خیلی سخت گیرانه هستن و آدم رو اذیت میکنن ... از طرفی بعضی کتابخونه ها rule های خاص خودشون رو دارن که باید بعد از اضافه کردن اون کتابخونه ها rule هاش رو هم نصب کنین.مثلا وقتی شروع به استفاده از Hook ها میکنی باید یه کتابخونه برای rule های react hook نصب کنی یا وقتی با jest تست مینویسی باید کتابخونه ی rule های jest رو نصب کنی و ...ما اول eslint , prettier رو نصب میکنیم و تنظیمات prettier رو انجام میدیم تا ببینیم چی میشهبرای شروع دستورات زیر رو بزنیدnpm install --save-dev eslint prettierخب در کنار package.json یه فایل به اسم .prettierrc میسازیم و تنظیمات زیر رو داخلش قرار میدیم .فکر کنم از اسماشون معلومه هر خط چیکار میکنه{ &amp;quotprintWidth&amp;quot: 100,
 &amp;quottrailingComma&amp;quot: &amp;quotall&amp;quot,
 &amp;quottabWidth&amp;quot: 2,
 &amp;quotsemi&amp;quot: true,
  &amp;quotsingleQuote&amp;quot: true,
  &amp;quotjsxBracketSameLine&amp;quot: true
  }برای این که prettier خوشحال بشه توی  vscode افزونه ی  prettier رو نصب میکنیم...بعدا یادم باشه افزونه خفن هارو جدا معرفی کنم برای نصب  ctrl+shift+p رو میزنیم و کد زیر رو وارد میکنیمext install esbenp.prettier-vscodeحالا دوباره ctrl+shift+p رو بزنین و تایپ کنین Open Workspace Settings  حالا در پنجره باز شده تنظیمات vscode رو میتونین ببینین ..به تب editor برید و format on save رو روشن کنین . به محض این کار میتونین ببینین که یه پوشه به اسم .vscode به پوشه های پروژه اضافه شده و فایل ستینگ داخلش اضافه شدهبه جای کار بالا میتونستین خودتون یه پوشه به اسم .vscode درست کنین و توش یه فایل ستینگ بسازین ..عوضش الان میدونین که اون فایل چجوری کار میکنه و میتونین از توی منوی بالا تنظیمات مختلفی که توی فایل ممکنه ذخیره بشه رو ببینینخب حالا بیاین prettier  رو آزمایش کنیم . چجوری؟ همون فایل تنظیمات prettier که اسمش .prettierrc بود رو باز کنین  و عدد tabWidth رو تغییر بدین و سیو کنین ...با سیو کردن باید کد ها فاصله شون تغییر کنهاینجوریtabWidth 8 در مقایسه با 2 خب حالا بریم سراغ ادامه eslintحقیقتش من از نصب eslint میترسم ..چون همیشه یه سری rule اعصاب خورد کن پیدا میشه که باید خاموششون کرد ..چندتایی رو الان خاموش میکنیم ولی بقیه ش توو کار خودشون رو نشون میدن و کم کم هر چی لازم نداشتیم رو میزاریم کنار ...واسه همین اگه زیادی ارور گرفتین دعوا نکنین من رو...تهش درست میشه همه چی ...یه روز خوب میاد ...  من این هارو نصب کردمnpm install --save-dev @typescript-eslint/parserاولی پارسر هست و خب پارس میکنه {دقیق نمیدونم چیکار میکنه ولی ما که داریم با تایپ اسکریپت کار میکنیم همین یدونه پارسر رو نصب میکنیم ...شایدم بشه دو تا پارسر با هم داشت ولی من تا حالا ندیدم}ما برای کار با تایپ اسکریپت لازمه که پلاگین تایپ اسکریپت رو هم نصب کنیمnpm install --save-dev @typescript-eslint/eslint-plugin کانفیگ زیر جلوی تداخل بین eslint و prettier رو میگیرهnpm install --save-dev   eslint-config-prettierشرکت airbnb یه سایت اجاره ی خونه که توی کلی کشور به جز ایران خدمات میده ... از قدیمیای استفاده از react هست و مجموعه ای از rule هارو برای کار با react نوشته و توسعه داده برای این که همشون رو با هم نصب کنیم کافیه دستور زیر رو بزنیمnpx install-peerdeps --dev eslint-config-airbnbبا زدن دستور بالا این پکیج ها خودکار نصب میشنeslint-config-airbnbeslint-plugin-importeslint-plugin-jsx-a11yeslint-plugin-reacteslint-plugin-react-hooksتقریبا از اسم هر کدوم میشه فهمید قراره چی رو کنترل کنن ...این اسم jsx-a11y شاید یه کم ناشنا باشه ...a11y در واقع از لحاض دسترس پذیری میاد و هینت میده ..مثلا میگه برای div بیا و role تعریف کن ...من خیلی دوسش ندارم و خیلی از rule هاش رو خاموش میکنم .خب الان میخوایم بریم سراغ فایل تنظیمات eslint ... بزار یه جور دیگه بریم جلو . شما میتونین eslint به صورت گلوبال نصب کنین این کار باعث میشه که وقتی توی ترمینالتون eslint رو وارد میکنین cli eslint اجرا بشه و یه سری چیزا در اختیارتون بزاره ..مثلا دستور eslint init براتون فایل کانفیگ درست میکنه ..خب ..برای نصب cli دستور زیر رو وارد کنینnpm i -g eslintحالا اگه توی ترمینال بنویسین eslint همچین چیزی میبینینخب ما حالا توو ترمینال مینویسیم eslint --init ببینیم چی میشهخب منم اولین بارم بود که اینجوری فایل کانفیگ میساختم ..ما همش فایل کانفیگ این و اون رو کپی میکردیم..الان خیلی هیجان زده شدم..موقع ساخت یه سری سوال پرسید و من از بین گزینه ها انتخاب کردم ..میتونین توی عکس ببینین ...و خودش در انتها شروع کرد کتابخونه هایی که لازم داره رو نصب کنه ..بیخود کد های بالا رو برای نصب زدیم ...عوضش الان میدونیم چی به چیهو در انتها یه فایل کانفیگ برامون ساخت که در ادامه میبینیمالان ما لازمه یه کم این فایل رو دستکاری کنیم و بیایم و اون کتابخونه ی مربوط به سازگاری prettier رو بهش اضافه کنیم...شاید بپرسین کلی پکیج نصب شده ولی چرا فقط اسم airbnb هست ? واسه اینه که airbnb توی خودش اونارو کال میکنه ... در واقع ما الان کلی rule روشن داریم و فقط لازمه اون هایی که نمیخوایم رو خاموش کنیم.خب من یه کم ور رفتم باهاش و در نهایت فعلا به تنظیمات زیر رسیدم  https://gist.github.com/straxico/238035de14764e7f7c82eb46136bfe20 افزونه ی eslint برای vscode رو هم با دستور ext install dbaeumer.vscode-eslint که توی کادر ctrl+shift+p وارد میکنین نصب کنینخب حالا که نصب تموم شد بریم برای اجرا ....برای این که eslint خودکار اجرا بشه کد زیر رو توی setting.json اضافه میکنیم.setting.json همون فایلی بود که توی پوشه ی .vscode بود.اینجا کد نوشتن مصیبته ..من باز gist میزارم https://gist.github.com/straxico/72313098acb1c6337e03f55d79aa41b5 خب تموم شد. حالا اون کامپوننت ساده ای که قبلا نوشته بودیم رو باز میکنیم.. یه کم فاصله اضافه میکنیم و بد شکلش میکنیم...بعد موقع سیو کردن میبینین که تر و تمیز میشه...اگه با توجه به rule ها ایراد قابل حلی داشته باشه خودش حل میکنه ..اگر هم لازم باشه ما حلش کنیم بهمون خطا یا هشدار میده ...مثلا اگه داخل کد کنسول لاگ بگیرین بهتون هشدار میده ... اینجوری حواستون هست تا داخل پروداکشن لاگ نفرستین ... پایین قبل از سیو کردن و بعد از سیو کردن رو مقایسه میکنممقایسه ی کد قبل و بعد از لینت شدنخب من تنها کاری که کردم ctrl +s رو زدم و خودکار کد مرتب شد...ببخشید که بیشتر از این نمیتونستم توی این کد گند بزنم ....توی این مثال اگه دقت کنین هنوز یه وارنینگ داریم و اون اینه که متغیری به اسم پراپ تعریف کردیم ولی ازش استفاده نکردیم ...eslint نمیاد همچین چیزایی رو خودش پاک کنه و شما خودتون باید درستش کنین مثلا توو این مثال کافبه به جای prop علامت () بزارین ..البته این فقط یه وارنه و میتونین اصلا بهش توجه نکنین تا اسم وارن رو بردارین و توی rule ها خاموشش کنین.بزرگترین مشکلی که با eslint داریم اینه که ما عادت کردیم از اینترنت کد کپی کنیم و خب هر کی هر جور دلش خواسته کد نوشته و وقتی یه حجم زیادی کد رو میاریم تو پروژه یهو مثلا 100 تا ارور میگیریم و ....بیخیال کپی شین ... همه چیو میشه نوشتخب تمیزکاری هم تموم شد انگار..البته بازم به اینجا بر میگردیمقبل از شروع کد نویسی هنوز یه سری کار مونده ... نصب و کانفیگ jest , storybook و راه اندازی گیت و تعیین پوشه بندی های اصلی پروژه  و resolve کردن import کردن ها الان ساعت 3:30 شبه ..بریم ببینیم تا 4 به کجا میرسیمراستی لازم نیست اینارو خودتون تیکه تیکه پیاده کنین ..پروژه مقدماتش که تموم شد و گیت که راه افتاد این رو برای شروع پروژه های دیگه م به صورت جدا توی گیت هاب میزارمش..فعلا بریم جلو ببینیم چی میشهداشت یادم میرفت..این پست جواد رو هم در مورد eslint و prettier بخونین   https://virgool.io/iran-react-community/eslint-%D9%88-prettier-%D8%A8%D8%B1%D8%A7%DB%8C-react-lztrya0tpj6r </description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Mon, 02 Sep 2019 03:45:36 +0430</pubDate>
            </item>
                    <item>
                <title>چه سایت هایی با ریاکت یا ویو یا انگولار نوشته شدن؟</title>
                <link>https://virgool.io/angular-iran/%DA%86%D9%87-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%87%D8%A7%DB%8C%DB%8C-%D8%A8%D8%A7-%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%DB%8C%D8%A7-%D9%88%DB%8C%D9%88-%DB%8C%D8%A7-%D8%A7%D9%86%DA%AF%D9%88%D9%84%D8%A7%D8%B1-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%B4%D8%AF%D9%86-myiflyrnymbw</link>
                <description>سلام...عنوان این نوشته منو یاد if هایی میندازه که هر روز مینویسیم ...هی یا ردیف میکنیم پشت هم ..بگذریممن وقتی یه سایت پیدا میکنم که برای پیاده سازیش از ابزار هایی استفاده کرده که منم استفاده میکنم کلی قوت قلب میگیرم. سعی میکنم مشکلاتی که باهاشون درگیر هستم رو توی اون سایت پیدا کنم و ببینم چجوری رفعش کردن ..یا توو کامیونیتی ها بگردم و دولوپراشون رو پیدا کنم و کمی با هم در موردشون حرف بزنیم ... همین ذوق کردن باعث شد تا به ذهنم بررسه که سعی کنم یه لیست از سایت های ایرانی که فرانت اندشون با استفاده از کتابخونه های react هست درست کنم ... بعد تصمیم گرفتم vue و angular هم اضافه کنم ..به درد من که نمیخوره ولی شاید کسی خوشش اومد .به هر حال یه ریپوزیتوری توی گیت هاب درست کردم و لیستم رو اونجا گذاشتم ...انتظار داشتم طویل تر از این بشه ولی فعلا همینا رو تونستم پیدا کنم..البته کم کم هر چی به چشمم خورد بهش اضافه میکنم ....خوشحال میشم شما هم اگه موردی به چشمتون خورد خودتون pr بدین یا یه جوری بهم بگین که اضافه ش کنم مثلا همین پایین نظر بفرستینفعلا یه همچین لیستی داریم...البته بعدا شاید بهتر دسته بندیش کنم و یه سری اطلاعات اضافه کنم و فیلان و بیسیاراینم آدرسش https://github.com/straxico/iran-front-technology چرا عکس منو نشون میده ؟ :D ....چه خوش تیپ بودم ...یاه یاه یاه</description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Sun, 01 Sep 2019 02:13:03 +0430</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 4 (styled-component)</title>
                <link>https://virgool.io/@straxico/%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%BA%D8%A7%D8%B1%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86-styled-component-msfvfdvsgbo3</link>
                <description>سلام برای ادامه و نصب styled-component روی nextjs لازمه که کمی بیشتر با نحوه ی کار نکست آشنا بشینصفحات دیفالت next.jsاگه دقت کرده باشین ما در ابتدا که هنوز توی پوشه ی pages چیزی نساخته بودیم ,موقع اجرا یه ارور 404 میگرفتیم که شکل و استایل داشت ... در واقع صفحه ی ارور هم یکی از صفحات پوشه ی pages هست که اگه تعیین نشده باشه نکست دیفالت صفحه ی خودش رو نشون میده ولی اگه فایلی به اسم _error.tsx بسازیم .نکست موقع نمایش خطا میاد و این فایل رو رندر میکنه و نمایش میده. شما میتونین محتوای دیفالت صفحه ی ارور رو از این آدرس نگاه کنین و اگه دوست داشتین کمی تغییرش بدین و در پوشه ی pages خودتون قرار بدین . من اینجا خود این فایل رو بدون تغییر میزارمش توی پوشه pages تا اگه بعدا لازمم شد تغییرش بدم .با دیدن کد بالا هول نشین .. کم کم متوجه همه چیز خواهید شداما چرا این رو گفتم؟اول از همه این که نکست جادو نمیکنه و نباید چیزی برامون نامعلوم باقی بمونهدوم این که علاوه بر _error دوتا فایل دیگه هم هست که نکست به صورت دیفالت داره از اونها استفاده میکنه و ما برای استفاده از styled-component نیاز داریم که تغییرشون بدیماین دو تا فایل اسماشون _app و _document هست که مقدار های دیفالتشون رو میتونین با کلیک روی اسمشون ببینینفایل document در واقع تشکیل دهنده ی ساختار اون html اولیه هست . این فایل فقط سمت سرور ران میشه و فقط نتیجه ش سمت کاربر فرستاده میشهفایل _app هم سمت سرور رندر میشه و هم سمت کاربربه طور مثال وقتی شما درخواست رندر صفحه ی index رو میدین . اول _document صدا زده میشه . بعد _app صدا زده میشه و بعد index و نتیجه (html رندر شده) همراه با فایل _app و index.js سمت کاربر فرستاده میشه .این وسط هم اگه جایی اروری پیش بیاد فایل _error رندر میشه و فرستاده میشه.خب پس فایل های _app و _document جزو فایل هایی هستن که همیشه و در هر بار فراخوانی یه صفحه اجرا میشنحالا اینا چه ربطی به styled-component داره؟موقعی که میخوایم به صورت ssr صفحه رو رندر کنیم لازم داریم تا استایل کامپوننت ها رو بتونیم داخل فایل html جا بدیم .یعنی سمت سرور باید استایل کامپوننت هارو جمع کنیم و داخل تگ &lt;/style&gt; داخل قسمت head قرار بدیم ...میتونیم این کار رو برای تک تک کامپوننت ها جدا انجام بدیم ...ولی دیوونه ایم مگه؟ بهتره این کار رو یه بار و داخل فایل _document انجام بدیم تا همه ی کامپوننت ها بتونن ازش استفاده کنن و این اتفاق فقط سمت سرور بیافتهنصب styled-componentپس الان ابتدا styled-component رو با دستور زیر نصب میکنیم و بعد فایل _document رو تغییر میدیم تا استایل های رندر شده  توسط styled-component رو بچسبونه به head فایل html.علاوه بر اون نیازه که ما یه کم فایل babel رو هم تغییر بدیم و کتابخونه ی babel-plugin-styled-componentsرو نصب کنیم. این فایل برای این که موقع ssr بابل اسم کلاس ها که به صورت هش هست رو بشناسه لازمه و در کل باعث میشه دولوپر ها راحت تر کار کنن پس ما لازم داریم که فایل بابل دیفالت نکست رو هم کمی دستکاری کنیم . بزارین اول کتابخونه هارو نصب کنیمبرای نصب کد زیر رو توی ترمینال میزنیمnpm install --save styled-componentsnpm install --save-dev babel-plugin-styled-componentsبرای این که تایپ های styled-component هم نصب بشه کد زیر رو بزنیدnpm install --save-dev @types/styled-componentsتنظیمات بابل هم به صورت دیفالت فایلش نمایش داده نمیشه . شما میتونین توی روت اصلی پروژه یه فایل به اسم .babelrc  درست کنین و تنظیمات مورد نظزتون رو داخل انجام بدین تنظیمات دیفالتش یه همچین چیزیه{ 
&amp;quotpresets&amp;quot: [&amp;quotnext/babel&amp;quot]
}اگه دقیق تر میخواین ببینین که next/babel چیه یه نگاه به این لینک بندازینفارغ از پیچیدگی های لینک بالا ما این پلاگین رو به تنظیمات بابل اضافه میکنیم و در نهایت یه فایل .babelrc داریم که حاوی کد زیره و داخل روت اصلی پروژه کنار فایل package.json قرار میگیره{ 
&amp;quotpresets&amp;quot: [&amp;quotnext/babel&amp;quot],
&amp;quotplugins&amp;quot: [[&amp;quotstyled-components&amp;quot, { &amp;quotssr&amp;quot: true }]]
}الان فقط میمونه تغییر _documentچقدر اینجا کد نوشتن سخته...توی لینک زیر گذاشتم  https://gist.github.com/straxico/77740ef488b6046f8f09c81de70e904e این فایل رو داخل پوشه ی pages باید بزاریددر واقع این فایل یه extends از کلاس داکیومنت که جزیاتش رو توو این لینک دیدین میسازه و توو قسمت getInitialProps میاد و یه متغیر به اسم استایل میسازه و استایل ها رو میریزه توشخب کار تموم شد و styled-component هم نصب شد .مرحله ی بعدی ساختار دادن به پوشه ها و نصب eslint و راه اندازی گیت پروژه هستولی قبلش بزارین یه تست کنیم ببینیم کار میکنه؟خب واسه تست کد index.tsx رو تغییر میدم import React from &#039;react&#039;
import styled from &#039;styled-components&#039;
const Title = styled.h1`
    font-size: 5em;
    text-align: center;
    color: palevioletred;
  `;
  const Home=()=&gt;(&lt;Title&gt;hello world&lt;/Title&gt;)
  export default Homeو بعد از زدن npm run dev نتیجه رو میبینین</description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Fri, 30 Aug 2019 22:20:21 +0430</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 3 (تایپ اسکریپت)</title>
                <link>https://virgool.io/@straxico/%D8%B1%DB%8C%D8%A7%DA%A9%D8%AA-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%BA%D8%A7%D8%B1%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86%D8%AA%D8%A7%DB%8C%D9%BE-%D8%A7%D8%B3%DA%A9%D8%B1%DB%8C%D9%BE%D8%AA-d4pv9i4ijgb3</link>
                <description>شما همون اول متوجه نمیشین که به تایپ نیاز دارین..تایپ ها کمکتون میکنن که بدونین الان چیا در اختیار دارین و چه کارهایی باهاشون میتونین بکنین ..به طور مثال من روی یه متغیر متنی نمیتونم از متد مپ استفاده کنم یا نمیتونم یه فانکشن رو که خروجی متنی نداره به عنوان پارامتر href تعیین کنم و هزار تا مثال دیگه که مجبوریم اینجور چیزا رو خودمون چک کنیم و تا وقتی اون اتفاق حین اجرا نیفته متوجه نمیشیم که کارمون جایی مشکل داشته ... حالا مثلا فرض کن معلوم باشه که یه فانکشنی خروجیش چیه یا معلوم باشه که ورودیاش باید از چه نوعی باشن و اگر نوع اشتباهی استفاده شده بود همون لحظه بگه داری اشتبا میزنی عمو ..خب این خیلی کمک میکنه تا سریع تر و بهتر و کم باگ تر کد بزنیم . از طرفی نیاز به داکیومنت رو پایین میاره و خودش یه جورایی داکیومنته. قابلیت کامل کردن خودکار بهتون کمک میکنه تا خیلی سریع تر کد بزنین انتخاب هایی که برای هندل کردن تایچ ها دارید یکی از اینهاستtypescript , flow و prop-typeفلو رو فیسبوک نوشته و به ریاکت نزدیک تر و کم دردسر تره ولی تایپ اسکریپت جنرال تر , کامیونیتی بزرگتر و کارکردن باهاش در vscode دلنشین تره ...به هر حال علاوه بر تایپ اسکریپت دوتا انتخاب دیگه هم دارین که اگه خواستین میتونین در موردشون مطالعه کنین ...من تایپ اسکریپت رو عمومی تر و فراگیر تر دیدم واسه همین رفتم سمتشتایپ اسکریپت توسط مایکروسافت معرفی شده و الان نسخه ی 3.6 خودش رو معرفی کرده و خیلی خوب با vscode مچ هست .برای نیاز هایی که من تا حالا داشتم زبون ساده ای بوده و من با دیدن چند تا مثال ازش شروع به استفاده کردم..ممکنه بعضی جاها حس کنین که داره اذیتتون میکنه ولی صبور باشین و ببینین چی میگه و چیزایی که میگه رو رفع کنین.برای این که تایپ اسکریپت یه فایل رو بشناسه لازمه پسوند اون رو به tsx تغییر بدین. موقعی که میخواین اون فایل رو اجرا کنین تایپ اسکریپت میاد و اون رو برمیگردونه به jsx و درواقع شما در انتها چیزی جز jsx نخواهید داشت که خب اونم باز توسط بابل تبدیل میشه به js خودمونالان جای آموزش تایپ اسکریپت نیست و منم هنوز دارم یاد میگیرم ولی چند تا نکته رو تا الان متوجه شدم که میگمبین type و interface یه سری تفاوت کوچیک وجود داره ولی توصیه شده که توی ریاکت از type استفاده بشهتایپ اسکریپت یه ویژگی داره به اسم enum که توصیه شده ازش استفاده نکنیمهر کتابخونه ای که از تایپ اسکریپت پشتیبانی بکنی و براش تایپ نوشته باشن رو شما میتونین تایپ هاش رو نصب کنین واستفاده کنین که جلو تر بهش میرسیمکانفیگ های تایپ اسکریپت توی یه فایل به اسم tsconfig.json ذخیره میشه که جلوتر بهش میرسیمخب بریم که حال کنیم با تایپ اسکریپتبرای نصب کافیه این دستور رو بزنین npm install --save-dev typescript با زدن این دستور تایپ اسکریپت روی پروژه ی ما نصب میشه . ما چون داریم از ریاکت و node استفاده میکنیم لازمه که تایپ های این دو کتابخونه رو نصب کنیم npm install --save-dev @types/react @types/nodeهر کتابخونه ی دیگه ای شروع به استفاده ازش میکنین رو برای این که تایپ هاش شناخته بشه لازمه نصبشون کنین ...حالا ممکنه بعضیا تایپ ها رو به طور جدا و توی یه کتابخونه ی دیگه نگه داری کنن , بعضیا هم توی همون کتابخون هی اصلی میزارن و خودکار خودش نصب میشه..یادتون باشه نبود تایپ ها مشکل ساز نیست ولی دیگه تایپ اسکریپت نمیتونه متوجه ی دستورات اون کتابخونه بشهخب تا اینجا ما فقط چند تا کتابخونه نصب کردیم و پکیج فایلمون همچین چیزیهبرای نصب تایپ اسکریپت و تایپ ها از --save-dev  استفاده کردیم چون این کتابخونه ها فقط موقع دولوپ نیازه و خروجی نهایی که برای پروداکشن میره قرار نیست tsx باشه. کلا هر وقت یه چیزی فقط برای دولوپ کاربرد داشت از --save-dev  موقع نصبش استفاده میکنیمخب ما همچنان توی پوشه ی pages چیزی نداریم و الان اگه npm run dev رو بزنیم باز هم مثل قبل برنامه ران میشه و با رفتن به 127.0.0.1:3000 ما ارور 404 خواهیم گرفت ..از طرفی ما هنوز فایل tsconfig.json رو نساختیم .باید بگم که نکست وقتی برای اولین بار یه فایل با پسوند tsx ببینه خودکار یه فایل tsconfig.json حاوی تنظیمات اولیه همراه با یه فایل تایپ به اسم next.d.ts میسازهساختن اولین کامپوننتخب من توی پوشه ی pages اولین فایل روتینگ ام که اشاره به / میکنه رو با اسم index.tsx میسازم و کد ساده ی زیر رو داخل مینویسماز قصد عکس فرستادم که اگه میخوای شروع کنی خودت بنویسی و از قصد دارم نصب پکیج هارو تیکه تیکه میرم جلو که ببینین چی میشهخب این کامپوننت خیلی ساده هست اول React رو از کتابخونه ی react ایمپورت کردم . یه فانکشن کامپوننت به اسم Home ساختم .. دقت کنین که اسم کامپوننت ها باید با حرف بزرگ شروع شه .این کامپوننت هیچ ورودی ای نداره واسه همین پرانتز اولی خالیه..و خروجی این کامپوننت یه تگ h1 هست که متن داخلش رو رندر میکنه .در نهایت هم این کامپوننت رو اکسپورت کردم ... اگه یکی بیاد و بگه تا همینجا ما 50 درصد ریاکت رو رفتیم به نظرم بیراه نگفتهخب حالا اگه دستور npm run dev رو بزنیم نکست متوجه میشه که یه فایل با پسوند tsx موجود و میاد و فایل tsconfig.json  رو میسازهفعلا با این که توی این فایل چی هست و چیکار میشه باهاش کرد کاری ندارم ...الان میریم وارد 127.0.0.1:3000 میشیم و میبینیم که دیگه ارور 404 نداریم و پروژه داره کار میکنه و تایپ اسکریپت هم فعال شده کمی در مورد تایپ اسکریپت بخونین تا من برگردم</description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Fri, 30 Aug 2019 20:40:46 +0430</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 2(next.js)</title>
                <link>https://virgool.io/@straxico/react2-zfpwzwmnzhcc</link>
                <description>شاید یه کم عجیب باشه که من قبل از این که حرفی در مورد ریاکت بزنم اومدم و دارم شروع میکنم به نوشتن از نکست .چند تا دلیل داره ...مهم ترینش اینه که ریاکت خیلی آسونه و ترکیبش با نکست آسونترش میکنه ...اگه جاوااسکریپت رو مسلط باشی به سادگی میتونی برای ریاکت کد بزنی و یادگیریش کمتر از یه روز زمان میبره ولی اکسپرت شدن خب نیاز به چلنچ و زمان داره...اگه تازه کاری و میخوای js رو یاد بگیری تا ریاکت رو یاد بگیری نمیخواد خیلی بترسی و پا پس بکشی ...همین  که بتونی یه کم با آبجکت ها و آرایه ها کار کنی و بتونی فانکشن بنویسی و map بزنی میتونی شروع کنی به ریاکت .. ولی یادت باشه هر وقت که به مشکل خوردی قبل از این که فکر کنی به خاطر ضعفت از دونستن رساکته یادت باشه که احتمالا به خاطر ضعفت در استفاده از js هست .اینجوری راحت تر میتونی مشکل رو پیدا و حل کنی. خب بزارین شروع کنم...مشکل چی بود؟ریاکت در حالت عادی به این صورت کار میکنه که شما به عنوان دولوپر یه سری کامپوننت مینویسین و اون هارو در نهایت با استفاده از وب پک باندل میکنین و در انتها شما یه فایل html ساده  ب همراه تعدادی فایل js دارین که اگر کاربر درخواست دیدن صفحه ای رو بده این فایل ها براش فرستاده میشه و مرورگرش اجرا میشه و بعد از اجرا ساختار اون فایل html ساده توی دام  تغییر میکنه و کاربر خروجی نهایی رومیبینه .این وسط چند تا مشکل وجود داره اگر مرورگر کاربر فایل جاوااسکریپت رو ساپورت نکنه عملا جز اون html ساده هیچی نمیبینه . لابد میپرسی کدوم کاربره که مرورگرش js ساپورت نکنه؟ احتمالا ربات هایی که توسط موتور های جستجو وارد سایتتون میشن در اجرای js کمی مشکل داشته باشن یا حال نداشته باشن فایل js رو پردازش کنن و چون با دیدن اون html ساده چیزی دستگیرشون نمیشه seo سایتتون افت میکنه...به خاک سیاه نمیشینین ولی یه کم خاک بازی خواهید کرد.اولین فایلی که کاربر میگیره اون html هست و بعد از اونه که فایل های باندل js شروع میکنن به لود شدن ..حالا اگه فایل باندلتون خیلی بزرگ باشه کاربر هیچی جز اون html ساده نمیبینه و باید منتظز باشه تا کل اون باندل دانلود و اجرا بشه تا بتونه خروجی رو ببینه.هر چقدر این زمان طولانی تر بشه احتمال خروج کاربر از صفحه هم بیشتر میشه .بنابراین ما دلمون میخواد اصلا یه html ساده نداشته باشیم و وقتی درخواستی اومد سمت سرور ما خودمون اون html اصلی رو درست کنیم و به جای اون html ساده ,اون اصلیه رو بفرستیم سمت کاربرخب لازمه ش چیه؟ لازمش اینه که ما سمت سرور بیایم و خودمون رو بزاریم به جای مرورگر کاربر و یه دور اون فایل های js رو اجرا کنیم و خروجی رو به صورت html در بیاریم و بفرستیم سمت کاربر. به این کار میگن server side rendering یا ssr که در مقابل client side rendering قرار میگیرهسایت airbnb که ssr نداره رو در حالتی که js روشن و خاموش باشه میبینینسایت پیاده که ssr داره رو در حالتی که js روشن و خاموش باشه میبینین خب فکر کنم تفاوت مشخص باشه؟استفاده از ssr در کنار مزایایی که داره مشکلاتی رو هم به وجود میاره که چند تاش رو میگماول از همه این که شما سمت سرور باید node داشته باشین و همه ی درخواست ها رو رندر کنین که نیاز به توان پردازشی بالایی داره و اسکیل کردن پروژه رو سخت میکنه ...شاید وقتی میبینی یه سایت مثل airbnb دتبال ssr نرفته دلیلش همین باشهشما نیاز دارین برنامه تون رو جوری بنویسین که علاوه بر مرورگر در محیط node هم قابل اجرا باشه. پس اگه از window جایی استفاده کردین نیاز هست که کدتون رو تغییر بدین چون ما توی node چیزی به اسم window نداریم.تغییر دادن آدرس rout ها به دو صورت ssr و csr انجام میشه و باید برای هر دو حالت آماده باشید و تدارک دیده باشین .بزار با مثال بگم. کاربر اگه آدر صفحه ی جستجوی سایت مارو وارد کنه در همون ابتدا سمت سرور  این صفحه به طور کامل رندر میشه و فرستاده میشه برای کاربر و کاربر محتوا میبینه (روتینگ ssr)...ولی اگر کاربر در صفحه ی هوم باشه و با کلیک روی دکمه ی جستجو وارد صفحه ی جست و جو بشه (روتینگ csr) همزمان یه api call میشه و تا زمانی که جواب api نیومده در صفحه ی سرچ یه سری بلاک خالی همراه با علامت لودینگ به کاربر نمایش داده میشه.این دو رفتار رو شما باید در قالب یک فایل پیاده کنین که خیلی هم کار سختی نیست فقط حواستون باید بهش باشهحالا چطور میتونیم ssr رو برای پروژه مون فعال کنیم ؟خب ما این کار رو توی پست قبلی به طور کامل انجام دادیم...خخخخخبه صورت دیفالت next js برامون ssr رو انجام میده ..بدون درد و خونریزی .. ولی روش های دیگه ای هم وجود داره که بهش نمیپردازیم اصلاویژگی های نکست:نکست کامیونیتی قوی ای داره و دیدن همین عکس برای اثباتش کفایت میکنههفته ای نیست که این ها یکی دوتا ریلیز جدید نداشته باشن و باگی فیکس نکرده باشننکست تقریبا یه اکوسیستم کامل ساخته و بعد از نصبش لازم نیست تک تک دنبال اجزای مختلف برای کارهای مختلف بگردی. همونزور که میدونیم ریاکت یه لایبرری هست و برای کارهایی مثل روتینگ یا پشتیبانی از css و خیلی کارای دیگه باید از کتابخونه های دیگه ای استفاده کنیم که واسه شروع کار رو سخت میکنه ولی از اون طرف هم دستمون رو باز میزاره تا خودمون انتخاب کنیم . حالا نکست اومده و برای خودش یه سری از این ویژگی هارو ساخته مثلا برای css-in-js اومده و styled-jsx رو معرفی کرده و داره ازش استفاده میکنه و یا نیاز نیست برای روتینگ کتابخونه ای نصب کنین و خودش روتینگ داره و...برای تیکه تیکه کردن کد ها نکست اومده و بر اساس روتینگ ها کد رو میشکنه..یعنی چی؟شما یه پوشه به اسم pages دارین که هر فایلی داخل اون باشه نکست به عنوان یه rout میشناشتش مثلا اگه من داخل پوشه ی pages یه فایل home.js داشته باشم .بعد از اجرای برنامه میتونم برم به آدرس 127.0.0.1:3000/home و وقتی واردش شدم نکست میاد و home.js رو رندر میکنه و خروجی رو میفرسته برای مرورگر به این ویژگی میگن file base routing ...در مقاله ی قبلی اگه یادتون باشه رفتیم به 127.0.0.1:3000 و ارور 404 دیدیم چون چیزی اونجا نبود .نکست میاد و 127.0.0.1:3000 رو از فایل index.js میخونه بنابراین من باید یه فایل index.js درست کنم و کد های مربوط به صفحه ی اولم رو اونجا بزاریم...حالا اگه کاربر وارد صفحه ی اولم بشه اون کد هارو میبینه و لازم نیست کد های مربوط به سایر صفحات براش فرستاده بشه ..به این میگن code splitting ... که نکست داره خودکار انجامش میده . یکی از جذابیت های next اینه که قسمت مثال هاش خیلی کامله و تقریبا چیز به درد بخوری نیست که نکست براش مثال نداشته باشه ... میتونین لیست مثال هاش رو از اینجا ببینین . همه ی مثال هاش هم به طور مرتب آپدیت میشن و خیلی کار راه انداز هستن .خب توی پست قبل نصبش هم که کردیم ..حالا کم کم بریم به سمت این که تایپ اسکریپت چیه ؟ چطور باید نصبش کرد ... یه کم به پروژه سرو شکل بدیم , ساختار فولدر هارو در بیاریم و گیت راه بندازیم و eslint رو هم فعال کنیم </description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Fri, 30 Aug 2019 19:26:00 +0430</pubDate>
            </item>
                    <item>
                <title>ریاکت برای غارنشینان 1</title>
                <link>https://virgool.io/@straxico/react-son2uem2ggy2</link>
                <description>غارنشینان رو میتونین اینجا بخونین..البته هیچ ربطی به این نوشته نداره و احتمالا چیزی دستگیرتون نمیشهخلاصه ش اینه که ما الان بروزترین ورژن از غارنشینان هستیم.کسی هست که مخالف باشه؟ ما قراره یه پروژه ی فرانت برای یه api آماده درست کنیم .دلم میخواد قدم به قدم با هم جلو بریم و چالش هایی که پیش میاد رو حل کنیم . پروژه عشقیه و احتمالا به سرانجام نرسه ولی میریم جلو ببینیم چی میشه.قراره از این ها استفاده کنیم و درگیر چالش هاش بشیم :git, react, next.js, express, nginx, docker, jest, eslint, typescript, styled-component, storybook, axiosاینا شاید بعضیا اسم هاشون گنده باشه ولی ما از هر کدوم به قدر نیازمون قراره استفاده کنیم پس نترسین و یادتون باشه زور هیچ کدومشون به استک اور فلو و ممارست شما نمیرسهمن قراره کلی اشتباه کنم که از همین الان ازتون میخوام خطاها رو بهم گوشزد کنین  خب من به رمزارز ها علاقه دارم و برای خرید و فروش یکی از جاهایی که زیاد استفاده میکنم سایت اکسیر هست . داکیومنت api اکسیر رو میتونین از اینجا نگاه کنین . هدف اصلی من اینه که با استفاده از این api یه api کاستوم در بک اند خودم به کمک پایتون فلاسک درست کنم که به طور خودکار به خرید و فروش بپردازه .بک اند تقریبا آماده ست فعلا درگیر بک اند و api نمیشم و بریم که یه فرانت کول داشته باشیم.بنابراین در انتها ما یه سایت خواهیم داشت که مشابه یه اکسچنچ اطلاعات خرید و فروش بیت کوین و اتریوم رو نشونمون میده و میتونیم اوردر خرید و فروش بزاریم, سایر اوردر هارو ببینیم , با بک اند کاستوم شده مون ویژگی stop loss بهش اضافه کنیم و در انتها  بتونیم ست کنیم که تحت شرایط مشخصی خودکار خرید و فروش کنه و از پنل فرانت قابل کنترل باشهمن وقتی با ریاکت آشنا شدم که هوک ها تازه اومده بودند و میشه گفت تا حالا کلاس کامپوننت با ریاکت ننوشتم .چند بار هم سمت استفاده از ریداکس رفتم ولی هر بار شکست خوردم و برام جا نیفتاد. پس اینجا قراره فقط از کانتکست استفاده کنم. خب من خیلی از اول میخوام توضیح بدمخانه ای برای نوشتن:اول از هر چیز لازمه که ما برای کار یه تکست ادیتور , محیط توسعه یا ide یا هر چی که اسمش رو میزارین  داشته باشیم ..شک نکنین که سعادتتون در استفاده از vscode هست .پس بدون چون و چرا برید از اینجا نصبش کنید.vscode کلی افزونه داره که واقعا کارهارو دلنشین میکنه ..کم کم در آینده معرفیشون میکنمالبته اگه چون و چرا دوست دارین میتونین یه نگاه به این آمار استک فلو بندازیننودوقتی یکی واژه ی نود رو میبینه ممکنه فکرش بره سمت برنامه ی 90 ..یه عده هم ذهنشون میره سمت نقاط شبکه یا ماینر های ارزهای دیجیتال ...یه عده هم به فکر عکس های خاکبرسری میافتن ....ولی نود واسه ما محیطیه که بهمون اجازه میده تا جاوااسکریپت رو سمت سرور اجرا کنیم و قدرت جاوااسکریپت رو بیرون از مرورگر داشته باشیم. که میتونین از اینجا نصبش کنین  .بعد از نصب دستورات زیر باید یه همچین خروجی هایی داشته باشنC:\Users\mehran&gt;node -v 
v12.4.0
C:\Users\mehran&gt;npm -v
6.9.0شروع ساخت پکیچ یه پوشه برای پروژه تون بسازید و برید توش و ترمینالتون رو باز کنید .اگه vscode نصب کردید کافیه اون پوشه رو با vscode باز کنید .توی vscode با زدن دکمه های ctrl+&#x60; میتونید ترمینال باز کنید . دقت کنید که &#x60; زیر دکمه ی esc قرار داره نه اونی که کنار enter هست.بعد از باز کردن ترمینال کافیه npm init رو وارد کنید و چند بار enter بزنین تا فایل package.json ساخته بشه.فایل پکیج در ابتدا یه چیزی شبیه اینهاون  scripts جاییه که ما دستوراتی رو که میخوایم توسط node اجرا بشه مینویسیم.به صورت دیفالت یه دستور test اونجا قرار گرفته که با صدا زدنش اون متن جلوش در ترمینال چاپ میشه  و یه ارور برمیگردونه تا ما مجبور شیم دستورات خودمون رو اونجا بنویسیم.برای استفاده ازش باید از npm run استفاده کنیم و بعدش اسم اسکریپتمون رو بنویسیم .یه چیز مثل اینnpm run testخب کم کم باید بریم سراغ نصب پکیج ها ی مورد نیاز و شروع برای نصب از دستوری مشابه دستور  زیر استفاده میکنیم   npm install --save esme-packageبرای شروع من سه تا پکیج ریاکت, ریاکت دام و نکست رو با دستور زیر نصب میکنمnpm install --save react react-dom nextبعد از اجرای این دستور میبینین که اون پکیج ها به دپندنسی پروژه توی فایل package.json اضافه شدن و توی پوشه ی پروژه یه پوشه به اسم node_module ساخته شده که فایل های مربوط به این پکیج ها اونجا نگه داری میشهبرای کار کردن با نکست لازمه که ما اسکریپت هاش رو به فایل package.json اضافه کنیم . نکست چند تا اسکریپت داره که مهم هاش اینا هستن&amp;quotdev&amp;quot: &amp;quotnext&amp;quot, 
&amp;quotbuild&amp;quot: &amp;quotnext build&amp;quot,
 &amp;quotstart&amp;quot: &amp;quotnext start&amp;quot میدونم که هنوز نگفتم نکست چیه ولی جلوتر بهش میرسیم .بزار اول راه بیافته خب با توجه به این ما فایل پکیجمون رو تغییر میدیم و میشه این
{
 &amp;quotname&amp;quot: &amp;quotexir-front&amp;quot,
 &amp;quotversion&amp;quot: &amp;quot1.0.0&amp;quot,
 &amp;quotdescription&amp;quot: &amp;quot&amp;quot,
  &amp;quotmain&amp;quot: &amp;quotindex.js&amp;quot,
  &amp;quotscripts&amp;quot: {
       &amp;quotdev&amp;quot: &amp;quotnext&amp;quot,
       &amp;quotbuild&amp;quot: &amp;quotnext build&amp;quot,
        &amp;quotstart&amp;quot: &amp;quotnext start&amp;quot
   },
   &amp;quotauthor&amp;quot: &amp;quot&amp;quot,
   &amp;quotlicense&amp;quot: &amp;quotISC&amp;quot,
   &amp;quotdependencies&amp;quot: {
      &amp;quotnext&amp;quot: &amp;quot^9.0.5&amp;quot,
      &amp;quotreact&amp;quot: &amp;quot^16.9.0&amp;quot,
      &amp;quotreact-dom&amp;quot: &amp;quot^16.9.0&amp;quot
    }
  }الان هرکدوم از اسکریپت هارو که اجرا کنیم با خطا مواجه میشیم چون هنوز هیچی ننوشتیم و چیزی برای اجرا وجود نداره .نکست برای اجرا لازم داره تا فایل های پروژه رو بتونه از پوشه ای به نام pages بخونه و اجرا کنه که خب ما هنوز چنین پوشه ای نداریم . پس یه پوشه به اسم pages میسازیم.و حالا اگه مثلا اسکریپت dev با زدن دستور npm run dev اجرا کنیم . برنامه کار میکنه و یه سرور روی پورت 3000 میاره بالا که میتونیم توی مرورگرمون بازش کنیم و برنامه ی ریاکتمون رو که با استفاده از نکست ساختیم ببینیماجرای نکست در حالت دولوپ خروجی ابتدایی برنامهخب ما بعد از اجرا روی لوکال هاستمون صرفا یه صفحه ی 404 دریافت کردیم و چیزی برای نمایش وجود نداره . چون هنوز چیزی توی پوشه ی pages اضافه نکردیم اصلا.فک کنم دیگه از اینجا به بعد لازم باشه کمی در  مورد نکست حرف بزنمبزار برم پست بعدی</description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Fri, 30 Aug 2019 16:53:30 +0430</pubDate>
            </item>
                    <item>
                <title>غارنشینان</title>
                <link>https://virgool.io/@straxico/%D8%BA%D8%A7%D8%B1%D9%86%D8%B4%DB%8C%D9%86%D8%A7%D9%86-otkx3meki2eh</link>
                <description>او هر روز  وقتی خورشید به نیمه های راه میرسد خود را لابه لای الیاف پنبه میپیچد و راهی غاری دست ساخت میشود ... چند ساعت به شیشه ی جلوی صورتش خیره میماند.. سپس فردی میاید و از آنها میپرسد امروز تکه های کدام حیوان ها و کدام گیاهان را انتخاب میکنید؟ بعد از مدتی آنها  پشت درختی که حالا تکه تکه و صاف شده است در حالتی نه ایستاده و نه خوابیده قرار میگیرند  و تکه هایی از بدن حیوانات و گیاهان مرده را در دهانشان میگذاردند و می جوند... در حالی که بر روی تکه های درخت، گلی را دور از نور  در اسارت گلدان درآورده و از آن لذت میبرند....سپس انحنایی منگوله دار را روی گوششان میگذاردند و شروع به صحبت های بی معنی میکنند...یکی شان گاه از امنیت میگوید... گاه درود میفرستد... و گاه دستانش را بالا میبرد و تسلیم میشود... دیگری اس اس کنان میخندد... آن یکی  برای خودش برگ های خشکیده ی بوته ای را درون آب ریخته و مینوشد ... یکیشان هم سر و صورتش را هم با پنبه پوشانده است و مدام میگوید قربون شما...دیگری گویی که خداست... با اشاره ای رنگ به جان آنچه میبینیم میپاشد ... بالای سرش سوراخی وجود دارد که هوایی خنک از آنجا به داخل غار فوت میشود... غار دو بخش دارد.. در بخش دوم پستانداران پنبه پیچی زندگی میکنند که پنبه ی کمتری دارند... آنها هر روز در جای خود قرار میگیرند و تکه های پلاستیکی را مدام فشار میدهند.. گاهی انحنای منگوله دار بر گوش میگذارند ولی چیزی از امنیت نمیگویند و درود نمیفرستند...خورشید که جهانشان را ترک کرد آنها نیز غار را ترک میکنند... هر یک به شکار میروند و صبح روز بعد باز به غار بازمیگردند</description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Sat, 17 Aug 2019 12:56:02 +0430</pubDate>
            </item>
                    <item>
                <title>یعنی منم شروع کنم به نوشتن؟</title>
                <link>https://virgool.io/@straxico/%DB%8C%D8%B9%D9%86%DB%8C-%D9%85%D9%86%D9%85-%D8%B4%D8%B1%D9%88%D8%B9-%DA%A9%D9%86%D9%85-%D8%A8%D9%87-%D9%86%D9%88%D8%B4%D8%AA%D9%86-wca9rys1scl8</link>
                <description>هی وسوسه میشم که بنویسم هی میگم بیخیالهی وسوسه میشم که بنویسم هی میگم بیخیالهی وسوسه میشم که بنویسم هی میگم بیخیالهی وسوسه میشم که بنویسم هی میگم بیخیالهی وسوسه میشم که بنویسم هی میگم بیخیالاینم واسه این که بشه 300 کاراکتر عامو ما خسه ایمواسه همینشم باید کلی تشویقم کنید D:</description>
                <category>مهران مطیعی</category>
                <author>مهران مطیعی</author>
                <pubDate>Thu, 15 Aug 2019 16:40:11 +0430</pubDate>
            </item>
            </channel>
</rss>