یک افزونه Chrome Generator ایجاد کنید🔥
معرفی
افزونه های مرورگر در زمان های اخیر به طور فزاینده ای محبوب شده اند. آنها دیگر فقط برنامه های کوچک ساده نیستند، بلکه محصولات سودآور و مناسبی هستند که هر روز توسط صدها کاربر استفاده می شود. با افزایش اندازه و پیچیدگی این افزونهها، ساخت آنها با استفاده از کتابخانههای مفید جاوا اسکریپت مهم میشود. با استفاده از این کتابخانهها، توسعهدهندگان میتوانند افزونههای جذابتر و جذابتری ایجاد کنند که تجربه کاربری بهتری را ارائه دهد. با ابزارها و تکنیک های مناسب، افزونه های مرورگر را می توان به ابزارهای قدرتمندی تبدیل کرد که کاربران هر روز به آنها اعتماد می کنند.
در این آموزش قصد دارم به شما یاد بدهم که چگونه می توانید یک افزونه کاربردی کامل و بسیار قدرتمند گوگل کروم ایجاد کنید. به هر حال، برای انجام این کار از CRXJS که یک پلاگین vite و همچنین معروف ترین و پرکاربردترین ReactJs است استفاده می کنیم.
اینم یه نگاه کوتاه 👀
- صفحه اصلی
- صفحه نمایش مدال
فن آوری
بیایید در مورد فناوری که در این آموزش از آن استفاده می کنیم صحبت کنیم.
سریع
Vite یک ابزار ساخت برای برنامه های کاربردی وب مدرن است. این به گونه ای طراحی شده است که سریع و کارآمد باشد و به توسعه دهندگان اجازه می دهد تا به سرعت نمونه اولیه برنامه های خود را بسازند. Vite از انواع فن آوری های وب مدرن، از جمله ماژول های ES، TypeScript و پیش پردازنده های CSS پشتیبانی می کند. همچنین شامل یک سرور توسعه داخلی با جایگزینی ماژول داغ است که توسعه و آزمایش برنامه ها را در زمان واقعی آسان می کند. Vite یک انتخاب محبوب برای ساخت برنامههای Vue.js است، اما میتوان از آن با چارچوبها و کتابخانههای دیگر نیز استفاده کرد. به طور کلی، Vite یک ابزار قدرتمند و انعطافپذیر است که میتواند به سادهسازی فرآیند توسعه برای برنامههای کاربردی وب مدرن کمک کند.
واکنش نشان دهید | پیش بینی کنید
ReactJS یک کتابخانه جاوا اسکریپت برای ساخت رابط کاربری است. از یک DOM مبتنی بر مؤلفه و یک DOM مجازی برای بهروزرسانی مؤثر رابط کاربری استفاده میکند. ReactJS سریع، انعطاف پذیر و به طور گسترده در توسعه وب مدرن استفاده می شود.
یا
در صورت تمایل می توانید از Preact استفاده کنید. PreactJS یک جایگزین سبک وزن برای ReactJS است که برای کارایی و سازگاری بالا طراحی شده است. اغلب در برنامه هایی استفاده می شود که عملکرد آنها بسیار مهم است و ردپای کوچکی دارد.
فکر می کنم باید بدانید CRXJS چیست. بنابراین، این سوال و پاسخ من برای شماست🙂
CRXJS چیست؟
افزونه CRXJS Vite ابزاری است که به شما کمک میکند برنامههای افزودنی Chrome را با استفاده از فناوری توسعه وب مدرن بسازید.
بسیار خوب اکنون می توانیم برای شروع کدنویسی بپریم 🚀
کد
برای ایجاد پروژه CRXJS ما فقط باید این کد را در ترمینال خود اجرا کنیم. یک چیز خنده دار وجود داشت که @jacksteamdev پیش بینی می کند که برای ایجاد یک پروژه CRXJS فقط 60 ثانیه طول می کشد.
npm init vite@latest
اکنون تایپ اسکریپت را به عنوان الگو انتخاب کنید و React را برای این پروژه انتخاب کنید.
وقتی init تمام شد، این دستور را اجرا کنید تا افزونه نصب شود.
yarn add @crxjs/vite-plugin@latest -D
بالاخره ما آماده دیدن خروجی خود هستیم🙂. فقط 1 قدم باقی مانده است
باید پیکربندی Vite را به روز کنیم
برای انجام این کار کافی است به فهرست پروژه خود بروید و پیدا کنید vite.config.ts
. این فایل را باز کنید سپس همه چیز را پاک کنید و این کد را همانجا قرار دهید.
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import { crx } from "@crxjs/vite-plugin";
import manifest from "./manifest.json";
export default defineConfig({
plugins: [react(), crx({ manifest })],
});
حالا اگر اشتباه نکنم شما در خط 4 با پیغام خطا مواجه هستید.😅
با این حال برای رفع این مشکل فقط تماس بگیرید manifest.json
از جانب tsconfig.node.json
.
باز کن tsconfig.node.json
از کارگردان پروژه حالا باید اضافه کنید manifest.json
فایل در آرایه شامل. به هر حال در اینجا مثال کد است.
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts", "manifest.json"]
}
حالا یک فایل به نام بسازید manifest.json
با این دستور
touch manifest.json
پس از ایجاد manifest.json
سپس این کد را در فایل manifest.json جدید خود قرار دهید.
{
"name": "Keyword Maker",
"description": "A powerfull keyword maker google chrome extension. Give a paragraph it's make keyword for you.",
"version": "0.0.1",
"manifest_version": 3,
"action": {
"default_popup": "index.html",
"default_title": "Keyword Maker",
"default_icon": {
"16": "icon.png",
"24": "icon.png",
"32": "icon.png"
}
},
"icons": {
"128": "icon.png",
"16": "icon.png",
"256": "icon.png",
"48": "icon.png"
}
}
همانطور که می بینید من از نماد استفاده می کنم. اما ما هنوز هیچ نمادی نداریم. با این حال، می توانید یک نماد را از هر جایی دانلود کنید و در خود جایگذاری کنید /public
پوشه
امیدوارم اکنون فهرست پروژه شما به شکل زیر باشد:
سرور توسعه را اجرا کنید
yarn run dev
خودشه! CRXJS بقیه کارها را انجام خواهد داد.
اکنون آماده افزودن به کروم ما است. برای انجام این کار این مرحله را دنبال کنید. یا اگر می دانید مانیفست را در برنامه افزودنی بارگیری کنید، این کار را ادامه دهید…
افزونه را به کروم اضافه کنید
بیایید آن را امتحان کنیم.
پس از تکمیل ساخت، Chrome یا Edge را باز کنید و به chrome://extensions بروید. حتما سوئیچ حالت توسعه دهنده را روشن کنید.
خود را بکشید dist
پوشه را در داشبورد افزونه ها وارد کنید تا آن را نصب کنید. نماد برنامه افزودنی شما در نوار بالا قرار خواهد گرفت. نماد اولین حرف نام برنامه افزودنی خواهد بود.
اکنون فقط برنامه را تغییر دهید width
;
/* App.css */
.App {
text-align: center;
min-width: 350px;
}
حالا می توانید مانند این خروجی را ببینید. 🚀
کتابخانه UI و وابستگی های دیگر را اضافه کنید.
برای هدف UI من از Chakra-UI استفاده خواهم کرد که بسیار محبوب است component based UI
کتابخانه همچنین از یک نان تست واکنش داغ برای درست کردن یک نان تست عالی استفاده خواهیم کرد.
yarn add @chakra-ui/react @emotion/react @emotion/styled framer-motion react-hot-toast axios && yarn dev
تا کنون، ما آماده ایجاد رابط کاربری و عملکرد عالی هستیم.
به هر حال باید تنظیم کنیم ChakraProvider
از Chakra-UI
همچنین باید Toaster را در قسمت تنظیم کنیم main.tsx
فایل. برای انجام این کار کافی است به src -> main.tsx بروید
import React from "react";
import ReactDOM from "react-dom/client";
import App from "./App.tsx";
// import "./index.css";
import { ChakraProvider } from "@chakra-ui/react";
import { Toaster } from "react-hot-toast";
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
<React.StrictMode>
<ChakraProvider> // chakra provider setup
<Toaster position="bottom-center" reverseOrder={false} /> // toaster provider setup
<App />
</ChakraProvider>
</React.StrictMode>
);
بیایید رابط کاربری صفحه اصلی ایجاد کنیم
این کد است. برای App.tsx
import {
Button,
Center,
Container,
HStack,
Heading,
Image,
Text,
Textarea,
VStack,
} from "@chakra-ui/react";
const App = () => {
return (
<Container w="400px" h="auto" mx="auto" p={4}>
<Center>
<Image w="16" src="icon.png" alt="logo" />
</Center>
<VStack spacing={0} my={2}>
<Heading as="h1" fontSize="xl" fontWeight="bold">
Keyword Macker AI
</Heading>
<Text
fontSize="sm"
color="gray.600"
fontWeight="400"
textAlign="center"
>
Past your text in the bellow section and it will generate{" "}
<strong>Keyword</strong> for you. 🙂
</Text>
</VStack>
<VStack my={4}>
<Textarea w="full" h="auto" placeholder="Past your text here..." />
<Button colorScheme="twitter">Generate Keyworld</Button>
</VStack>
<HStack
w="full"
textAlign="center"
fontWeight="semibold"
mt={3}
justify="center"
>
<Text>Created by </Text>
<Text
cursor="pointer"
color="green"
textDecor="underline"
onClick={() =>
window.open("https://www.showwcase.com/devlopersabbir")
}
>
@devlopersabbir
</Text>
</HStack>
</Container>
);
};
export default App;
اکنون تعدادی ایجاد کنید state
استفاده كردن useState
واکنش قلاب. من قصد دارم ایجاد کنم text
حالت برای متن اعلان فروشگاه. و دومی است keyword
حالتی که به ما کمک می کند تا داده های پاسخ خود را به عنوان کلمه کلیدی ذخیره کنیم. 3 است loading
دولت برای ساختن spinner
چه زمانی HTTP
درخواست در انتظار است… و آخرین مورد است useDisclosure
قلاب از @chakra-ui/react
زیرا ما بعداً یک مودال ایجاد خواهیم کرد.
همچنین باید متنی را از آن بگیریم onChange
روش. پس از آن، اکنون یک کنترل کننده کلیک را در دکمه تولید خود تنظیم کنید.
حالت
const [text, setText] = useState<string>("");
const [keyword, setKeyword] = useState<string>("");
const [loading, setLoading] = useState<boolean>(false);
const { isOpen, onOpen, onClose } = useDisclosure();
عملکرد هندلر
const generate = async () => {}
کد ما را به روز کنید
<Textarea
onChange={(event: any) => setText(event.target.value)}
w="full"
value={text}
h="auto"
placeholder="Past your text here..."
/>
<Button disabled={loading} colorScheme="twitter" onClick={generate}>
{loading ? <Spinner /> : "Generate Keyword"}
</Button>
عملکرد ما باید ناهمگام باشد زیرا ما خواهیم ساخت HTTP
درخواست.
ادغام OpenAI
اکنون می خواهیم api_key را برای تولید کلمه کلیدی خود ایجاد کنیم. ما از پلتفرم OpenAI استفاده خواهیم کرد. اگر حساب openAi دارید، اوکی کنید یا اگر نه، یک حساب جدید ایجاد کنید. و اکنون برای ایجاد کلید api به این آدرس بروید. برای ایجاد api_key روی من کلیک کنید.
کلید مخفی را کپی کرده و در هر جایی جایگذاری کنید زیرا دیگر این کلید را نخواهیم دید.
حالا یک متغیر در قسمت ایجاد کنید App.tsx
فایل فراخوانی شد YOUR_API_KEY
.
const YOUR_API_KEY = "Enter your secret key here...";
تا الان خیلی کارها را تمام کرده ایم. در این زمان ما آماده هستیم تا یک http
درخواست با استفاده از axios و ما api key
.
با استفاده از یک شی بسازید data
متغیر برای داده های سریع
const datas: any = {
model: "text-davinci-003",
prompt: `Generate keyword from this text. Make the first latter of each word uppercase and separate with commas. The text is here: ${text}`,
temperature: 0.5,
max_tokens: 60,
top_p: 1.0,
frequency_penalty: 0.8,
presence_penalty: 0.0,
};
اکنون هدر خود را با توکن حامل تنظیم کنید.
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${YOUR_API_KEY}`,
},
در اینجا کامل ما است App.tsx
کد
import {
Button,
Center,
Container,
HStack,
Heading,
Image,
Spinner,
Text,
Textarea,
VStack,
useDisclosure,
} from "@chakra-ui/react";
import { useState } from "react";
import Modals from "./components/Modals";
import axios from "axios";
import { toast } from "react-hot-toast";
const App = () => {
const YOUR_API_KEY = "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";
const [text, setText] = useState<string>("");
const [keyword, setKeyword] = useState<string>("");
const [loading, setLoading] = useState<boolean>(false);
const { isOpen, onOpen, onClose } = useDisclosure();
const generate = async () => {
setLoading(true);
const datas: any = {
model: "text-davinci-003",
prompt: `Generate keyword from this text. Make the first latter of each word uppercase and separate with commas. The text is here: ${text}`,
temperature: 0.5,
max_tokens: 60,
top_p: 1.0,
frequency_penalty: 0.8,
presence_penalty: 0.0,
};
try {
const { data } = await axios.post(
"https://api.openai.com/v1/completions",
datas,
{
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${YOUR_API_KEY}`,
},
}
);
const keyword = data.choices[0]?.text?.trim();
toast.success("Keyword generated😍");
setText("");
onOpen();
return setKeyword(keyword);
} catch (error: any) {
if (!error?.response?.data || !error?.response)
return toast.error("Something went wrong!😒");
const mess = error?.response.data?.message;
if (mess) return toast.error(mess);
toast.error("Fail to generate keyword😪");
} finally {
setLoading(false);
}
};
return (
<Container w="400px" h="auto" mx="auto" p={4}>
<Center>
<Image w="16" src="icon.png" alt="logo" />
</Center>
<VStack spacing={0} my={2}>
<Heading as="h1" fontSize="xl" fontWeight="bold">
Keyword Macker AI
</Heading>
<Text
fontSize="sm"
color="gray.600"
fontWeight="400"
textAlign="center"
>
Past your text in the bellow section and it will generate{" "}
<strong>Keyword</strong> for you. 🙂
</Text>
</VStack>
<VStack my={4}>
<Textarea
onChange={(event: any) => setText(event.target.value)}
w="full"
value={text}
h="auto"
placeholder="Past your text here..."
/>
<Button disabled={loading} colorScheme="twitter" onClick={generate}>
{loading ? <Spinner /> : "Generate Keyworld"}
</Button>
</VStack>
<HStack
w="full"
textAlign="center"
fontWeight="semibold"
mt={3}
justify="center"
>
<Text>Created by </Text>
<Text
cursor="pointer"
color="green"
textDecor="underline"
onClick={() =>
window.open("https://www.showwcase.com/devlopersabbir")
}
>
@devlopersabbir
</Text>
</HStack>
<Modals data={keyword} isOpen={isOpen} onClose={onClose} />
</Container>
);
};
export default App;
توجه: همانطور که در اینجا می بینیم یک
Modals
جزء. اما ما هنوز مانند این کامپوننت را ایجاد نکرده ایم.
برای انجام این کار اجازه دهید یک پوشه کامپوننت در src -> component -> ایجاد کنیم و یک کامپوننت به نام ایجاد کنیمModals
.
بنابراین، در اینجا کد جزء معین ما است.
import {
Button,
Modal,
ModalBody,
ModalCloseButton,
ModalContent,
ModalFooter,
ModalHeader,
ModalOverlay,
Text,
} from "@chakra-ui/react";
import { toast } from "react-hot-toast";
interface IModals {
isOpen: boolean;
onClose: () => void;
data: string;
}
const Modals = ({ isOpen, onClose, data }: IModals) => {
return (
<Modal size="sm" isOpen={isOpen} onClose={onClose}>
<ModalOverlay />
<ModalContent>
<ModalHeader>Keyword</ModalHeader>
<ModalCloseButton />
<ModalBody>
<Text fontSize="lg" fontWeight="500">
{data}
</Text>
</ModalBody>
<ModalFooter>
<Button colorScheme="blue" mr={3} onClick={onClose}>
Close
</Button>
<Button colorScheme="green">
Copy
</Button>
</ModalFooter>
</ModalContent>
</Modal>
);
};
export default Modals;
همانطور که می بینیم در Modals
جزء ما 3 پارامتر را به عنوان یک props دریافت می کنیم. همچنین از a استفاده می کنیم interface
. با این حال اینو دیدی؟؟ ما داریم copy button
😎
چیکار میکنی؟؟🤣
متاسفم برای سرگرمی زیاد ما یک عملکرد ساده برای کپی کردن خود ایجاد خواهیم کرد result keyword
. باشه، بیایید ایجاد کنیم…
کلمه کلیدی را در کلیپ بورد کپی کنید
const handleCopyClick = async () => {
try {
await navigator.clipboard.writeText(data);
toast.success("🚀 Keyword copied🥹");
} catch (error) {
toast.error("Fail to copy the keyword!");
}
};
// add replace copy button line with this line.
<Button onClick={handleCopyClick} colorScheme="green">
Copy
</Button>
تمدید ما تموم شد😁
به هر حال، اگر می خواهید کد منبع کامل را در لینک Repo نمایه GitHub من مشاهده کنید. همچنین در اینجا لینک آموزش ویدیویی یوتیوب وجود دارد
.
.
نویسنده
نام کامل صابر حسین شوو. و نمایه GitHub https://github.com/devlopersabbir است.
برای پشتیبانی فقط برای من یک قهوه بخر
https://www.buymeacoffee.com/devlopersabbir