برنامه نویسی

ساختن یک برنامه Next.js با استفاده از Tailwind و Storybook

نوشته الیجا اسائولو✏️

توسعه کامپوننت محور نحوه ایجاد برنامه های کاربردی وب را تغییر داده است. این رویکرد توسعه مدیریت و نگهداری پایگاه های کد برنامه را آسان تر می کند و در عین حال سازگاری طراحی و همکاری بین توسعه دهندگان را تسهیل می کند.

یکی از مزایای اصلی توسعه مبتنی بر کامپوننت، جداسازی کامپوننت است، که به شما امکان می‌دهد به طور مستقل روی اجزای سازنده کار کنید بدون اینکه حواس‌تان به برنامه‌های اطراف منحرف شود. Storybook.js یکی از ابزارهایی است که می تواند در این زمینه کمک کند.

در این آموزش، ما به این خواهیم پرداخت که Storybook چیست، چگونه کار می‌کند، و چگونه می‌توان با ایجاد داستان در برنامه Next.js با استفاده از Tailwind CSS برای استایل‌سازی شروع کرد. پوشش خواهیم داد:

برای ادامه این آموزش، باید با Next.js و Tailwind CSS آشنا باشید. تجربه قبلی با Storybook نیز ممکن است مفید باشد. با این حال، این مقاله سعی خواهد کرد تا اصول اولیه را به سرعت پوشش دهد.

کتاب داستان چیست؟

Storybook یک ابزار وب برای توسعه و آزمایش اجزای رابط کاربری جدا از یک برنامه خاص است. این به شما امکان می دهد برای هر جزء “داستان” ایجاد کنید، که نمونه هایی از نحوه ظاهر و رفتار مولفه در زمینه های مختلف است: مؤلفه مثال دکمه ایجاد شده در کتاب داستان با پیش‌نمایش دکمه گرد آبی در بالای صفحه نمایش، فهرست مؤلفه‌های مختلف در نوار منوی سمت چپ، و کنترل‌های مؤلفه دکمه‌ای که نیمی از پایین تصویر را در بر می‌گیرد.

پس از آن استوری هایی که ایجاد می کنید می توانند در یک مرورگر در یک محیط توسعه نمایش داده شوند و به شما این امکان را می دهند که به راحتی اجزای خود را آزمایش و اشکال زدایی کنید.

کتاب داستان شامل چندین ویژگی مفید است، مانند توانایی اضافه کردن یادداشت، کنترل وضعیت مؤلفه و بررسی قوانین دسترسی.

همچنین به شما این امکان را می‌دهد تا با اجزای سازنده تعامل داشته باشید و پیش‌نمایش کنید که چگونه کامپوننت در حالات و حالات مختلف به نظر می‌رسد، که به نوبه خود به شما امکان می‌دهد به طور موثر تست و اشکال‌زدایی کنید.

شروع به کار با Next.js، Storybook و Tailwind

بیایید با اجرای دستور زیر شروع به ایجاد یک برنامه Next.js جدید کنیم:

npx create-next-app next-storybook
وارد حالت تمام صفحه شوید

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

بعد، دایرکتوری را تغییر دهید (cd) به برنامه جدید، سپس دستور زیر را برای نصب Tailwind CSS و وابستگی های آن اجرا کنید:

npm install -D tailwindcss postcss autoprefixer
وارد حالت تمام صفحه شوید

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

پس از این، دستور زیر را اجرا کنید تا هر دو تولید شوند tailwind.config.js و postcss.config.js همانطور که توسط Tailwind CSS مورد نیاز است:

npx tailwindcss init -p
وارد حالت تمام صفحه شوید

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

باز کن tailwind.config.js و کد آن را به کد زیر به‌روزرسانی کنید تا محتوای صادراتی شامل فایل‌هایی در پروژه ما باشد /pages و /components دایرکتوری ها

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: [
    "./pages/**/*.{js,ts,jsx,tsx}",
    "./components/**/*.{js,ts,jsx,tsx}",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
};
وارد حالت تمام صفحه شوید

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

در نهایت، پیش فرض را باز کنید styles/global.css فایل و اضافه کنید @tailwind دستورالعمل های زیر در بالای کد نشان داده شده است:

@tailwind base;
@tailwind components;
@tailwind utilities;
وارد حالت تمام صفحه شوید

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

در این مرحله، ما با موفقیت برنامه Next.js خود را برای کار با Tailwind CSS پیکربندی کردیم و می‌توانیم از کلاس‌های ابزار Tailwind استفاده کنیم.

افزودن کتاب داستان به برنامه Next.js

شما می توانید Storybook را به سادگی با اجرای دستور زیر به برنامه Next.js اضافه کنید:

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

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

اگر از Next.js نسخه 11 و جدیدتر استفاده می‌کنید، توصیه می‌شود از webpack 5 برای یکپارچگی و عملکرد بهتر استفاده کنید:

npx sb init --builder webpack5
وارد حالت تمام صفحه شوید

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

اجرای هر یک از این دستورات وابستگی های مورد نیاز را نصب می کند و یک محیط کتاب داستان برای پروژه شما راه اندازی می کند. همچنین باید دو پوشه جدید ایجاد شود – .storybook و stories.

را .storybook دایرکتوری حاوی a main.js فایل و الف preview.js فایل. اینها به ما اجازه می دهند ظاهر و احساس برنامه خود را پیکربندی کنیم، و همچنین به ما امکان می دهد محیط Storybook خود را مطابق با اولویت های خود مهندسی کنیم.

را stories پوشه حاوی داستان ها و اسناد پیش فرض است. ما در یک لحظه یاد خواهیم گرفت که چگونه خودمان را بسازیم.

برای آزمایش موارد، از دستور زیر برای راه اندازی رابط Storybook استفاده کنید:

npm run storybook
# OR 
yarn storybook
وارد حالت تمام صفحه شوید

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

یک صفحه وب جدید باید در باز شود http://localhost:6006، و شما باید چیزی شبیه به این را ببینید: مثال رابط کتاب داستان برای اینکه چگونه یک کامپوننت صفحه در Frontend برای یک کاربر از سیستم خارج شده ظاهر می شود

در اطراف این محیط بازی کنید تا درک بهتری از نحوه کار داستان‌ها و مستندات در Storybook قبل از شروع ایجاد محیط خود داشته باشید.

پس از اتمام بازی، ادامه دهید و آن را حذف کنید /stories دایرکتوری، سپس محتوای آن را به روز کنید .storybook/main.js برای مطابقت با موارد زیر:

module.exports = {
  stories: [
    "../components/**/*.stories.mdx",
    "../components/**/*.stories.@(js|jsx|ts|tsx)",
  ],
  addons: [
    "@storybook/addon-links",
    "@storybook/addon-essentials",
    "@storybook/addon-controls",
  ],
  webpackFinal: async (config) => {
    config.module.rules.push({
      test: /\.scss$/,
      use: ["style-loader", "css-loader", "postcss-loader", "sass-loader"],
    });

    return config;
  },
};
وارد حالت تمام صفحه شوید

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

در کد بالا، Storybook را به گونه‌ای پیکربندی کردیم که به دنبال داستان‌ها/مستندات در آن بگردد /components دایرکتوری به جای پیش فرض /stories دایرکتوری، به ما این امکان را می دهد که اجزای خود و همچنین داستان های مربوط به آنها را در یک فهرست قرار دهیم.

افزودن پشتیبانی Tailwind CSS برای Storybook

Storybook به طور پیش فرض با Tailwind CSS کار نمی کند. در نتیجه، اگر یک کامپوننت React را با استفاده از کلاس های ابزار Tailwind ایجاد کنیم و سپس یک داستان بر اساس این مؤلفه ایجاد کنیم، تغییرات CSS Tailwind در محیط Storybook منعکس نمی شود.

برای رسیدگی به این مشکل، ما یک را اضافه کرده ایم webpackFinal گزینه به .storybook/main.js فایل کانفیگ در کد قبلی این به Storybook دستور می دهد تا با وابستگی های لازم مورد نیاز Tailwind CSS بسازد:

. . .
  webpackFinal: async (config) => {
    config.module.rules.push({
      test: /\.scss$/,
      use: ["style-loader", "css-loader", "postcss-loader", "sass-loader"],
    });

    return config;
  },
وارد حالت تمام صفحه شوید

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

همچنین، به روز رسانی کنید .stories/preview.js فایل با کد زیر:

import "../styles/globals.css";

import * as nextImage from "next/image";

Object.defineProperty(nextImage, "default", {
  configurable: true,
  value: (props) => <img {...props} />,
});

export const parameters = {
  actions: { argTypesRegex: "^on[A-Z].*" },
};
وارد حالت تمام صفحه شوید

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

این فایل برای وارد کردن شیوه نامه جهانی و پشتیبانی به روز شد next-image. در نتیجه، هر دو Tailwind CSS و next-image باید در محیط Storybook ما به درستی عمل کند.

ایجاد داستان برای پروژه Next.js و Tailwind ما

برای ایجاد یک داستان جدید، ابتدا باید مؤلفه ای را ایجاد کنیم که داستان بر اساس آن ساخته می شود. جدید ایجاد کنید /components/Card پوشه در پوشه ریشه پروژه شما. سپس، در داخل این فهرست جدید، دو فایل ایجاد کنید:

  • index.js – حاوی کد اصلی جزء کارت ما خواهد بود
  • card.stories.js – حاوی کد داستان برای جزء کارت ما خواهد بود

وقتی کارمان تمام شد، ساختار فایل پروژه ما باید به شکل زیر باشد:

.
├── . . .
├── components
   └── Card
       ├── index.js
       └── card.stories.js
├── pages
   └── index.js
├── public
└── . . .
وارد حالت تمام صفحه شوید

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

درون Card/index.js فایل، کد زیر را قرار دهید:

import PropTypes from "prop-types";

const Card = ({ title, showSub, background, imgUrl, children }) => {
  return (
    <div class="flex justify-center">
      <div
        class={`flex flex-col md:flex-row md:max-w-xl rounded-lg bg-${background} shadow-lg`}
      >
        <img
          class=" w-full h-96 md:h-auto object-cover md:w-48 rounded-t-lg md:rounded-none md:rounded-l-lg"
          src={imgUrl}
        />
        <div class="p-6 flex flex-col justify-center">
          <h5 class="text-gray-900 text-xl font-medium mb-2">{title}</h5>
          {showSub && (
            <p class="text-gray-500 text-sm mt-2">This is the card subtitle</p>
          )}
          <p class="text-gray-700 text-base mt-4 mb-4">{children}</p>

          <button
            type="button"
            class="inline-block px-6 py-2.5 bg-blue-600 text-white font-medium text-xs uppercase rounded shadow-md"
          >
            Some action
          </button>
        </div>
      </div>
    </div>
  );
};

export default Card;

Card.propTypes = {
  title: PropTypes.string,
  sub: PropTypes.string,
  showSub: PropTypes.bool,
  imgUrl: PropTypes.string,
  background: PropTypes.string,
};
وارد حالت تمام صفحه شوید

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

با استفاده از کلاس‌های کاربردی Tailwind CSS، یک مؤلفه در کد بالا ایجاد کردیم که می‌پذیرد title، showSub، imgUrl، background، و children prop و یک کارت پایه با پروپ های عبوری تولید می کند.

شاید متوجه شده باشید که ما از React نیز استفاده کرده ایم PropTypes بسته ای برای تعریف انواع پایه ما. ما باید آن را به این صورت نصب کنیم:

npm install prop-types
وارد حالت تمام صفحه شوید

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

برای ایجاد داستان کارت، کد زیر را در داخل آن قرار دهید card.stories.js فایل:

import Card from "./index";

export default {
  title: "My Cards",
};

const Template = (arguments_) => <Card {...arguments_} />;

export const GreenCard = Template.bind({});

GreenCard.args = {
  title: "Hello World",
  showSub: false,
  background: "yellow-600",
  imgUrl: "https://path/to/some/image",
  Children: "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nulla, soluta?",
};
وارد حالت تمام صفحه شوید

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

در کد بالا، ما یک داستان جدید به نام “کارت های من” ایجاد کردیم که الگوی داستان را به آن متصل می کند Card جزء که قبلا ایجاد کردیم.

سپس یک نمونه جدید از the ایجاد کردیم Card داستان به نام GreenCard و موارد فوق را پاس کرد GreenCard.args ارزش‌ها به‌عنوان لوازمی که باید با ما ارائه شوند Card جزء.

برای راه اندازی مجدد محیط Storybook دستور زیر را اجرا کنید:

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

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

پس از شروع، باید ببینید که داستان کارت ما اکنون همانطور که در تصویر زیر نشان داده شده است ایجاد شده است: مؤلفه کارت مثال ایجاد شده در کتاب داستان با کنترل‌هایی که برای عناصر کارت مانند عنوان، رنگ پس‌زمینه، آدرس اینترنتی تصویر و کودکان نمایش داده می‌شوند.

همچنین باید توجه داشته باشید که با ایجاد تغییرات در بخش کنترل، مؤلفه ما به طور خودکار به روز می شود.

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

این تمام چیزی است که وجود دارد! ما توانستیم Storybook را در پروژه Next.js نصب کنیم و آن را طوری تنظیم کنیم که با Tailwind CSS کار کند.

نتیجه

در طول این مقاله، ما بر اهمیت جداسازی اجزا تاکید کرده‌ایم. ما همچنین نحوه استفاده از Storybook – یک ابزار وب برای توسعه و آزمایش اجزای UI به صورت مجزا – در برنامه Next.js و همچنین نحوه پیکربندی Tailwind CSS برای چنین پروژه ای را مورد بحث قرار دادیم.

همچنین می توانید کد منبع کامل این آموزش را در GitHub بیابید.


LogRocket: مشاهده کامل برنامه های Next.js تولیدی

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

ثبت نام LogRocket

LogRocket مانند یک DVR برای برنامه های وب و تلفن همراه است که به معنای واقعی کلمه هر چیزی را که در برنامه Next شما اتفاق می افتد ضبط می کند. به جای حدس زدن چرایی مشکلات، می توانید در مورد وضعیتی که برنامه شما در هنگام بروز مشکل در آن قرار داشت، جمع آوری کرده و گزارش دهید. LogRocket همچنین عملکرد برنامه شما را نظارت می کند و با معیارهایی مانند بار CPU مشتری، استفاده از حافظه مشتری و موارد دیگر گزارش می دهد.

بسته میان افزاری LogRocket Redux یک لایه دید اضافی را به جلسات کاربر شما اضافه می کند. LogRocket تمام اقدامات و وضعیت ها را از فروشگاه های Redux شما ثبت می کند.

نحوه اشکال زدایی برنامه های Next.js خود را مدرن کنید — نظارت را به صورت رایگان شروع کنید.

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

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

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

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