यह मार्गदर्शिका आपको माइक्रोबंडल का उपयोग करके, शुरू से अंत तक अपना एनपीएम पैकेज बनाने और जारी करने की सबसे आसान प्रक्रिया के बारे में बताएगी।
आइये इसके microbundle
के बारे में थोड़ी बात करते हैं। मुझे यह सरल पुस्तकालयों के लिए विशेष रूप से प्रभावी लगता है क्योंकि आपको कॉन्फ़िगरेशन के बारे में चिंता करने की ज़रूरत नहीं है, जिससे आप अपने पैकेज को विकसित करने पर ध्यान केंद्रित कर सकते हैं।
यहां इसकी विशेषताओं की एक संक्षिप्त सूची दी गई है:
package.json
में एक "निर्यात" फ़ील्ड जोड़ना हैtsconfig.json
के बिना बॉक्स से बाहर टाइपस्क्रिप्ट समर्थन
मूल रूप से, microbundle
रोलअप.जेएस के शीर्ष पर बनाया गया है। यदि आपके पास बनाने के लिए मेरे द्वारा इस लेख में बताए गए से अधिक जटिल पुस्तकालय हैं, तो आप शुद्ध rollup.js
कॉन्फ़िगरेशन का उपयोग करने पर विचार कर सकते हैं।
उदाहरण के तौर पर, आइए दो संख्याओं के योग के लिए एक सरल लाइब्रेरी बनाएं, जो केवल एक फ़ंक्शन sum
निर्यात करेगी।
प्रोजेक्ट के लिए एक फ़ोल्डर बनाएं, और package.json
जेनरेट करने के लिए डिफ़ॉल्ट मानों के साथ npm init
चलाएँ
src
फ़ोल्डर में index.ts
बनाएं
// src/index.ts export function sum(a: number, b: number) { return a + b; }
microbundle
स्थापित करें
npm i -D microbundle
निम्नलिखित मानों के साथ package.json
अद्यतन करें:
// package.json ... "type": "module", "source": "src/index.ts", // your source code "exports": { "types": "./dist/index.d.ts", // TypeScript declaration file "require": "./dist/index.cjs", // CommonJS entry point "default": "./dist/index.esm.js" // ES Module entry point }, "main": "./dist/index.cjs", // where to generate the CommonJS bundle "module": "./dist/index.esm.js", // where to generate the ESM bundle "unpkg": "./dist/index.umd.js", // where to generate the UMD bundle "types": "./dist/index.d.ts", // TypeScript declaration file for the package "scripts": { "build": "microbundle", // compiles "source" to "main", "module", "unpkg" "dev": "microbundle watch" // re-build when source files change } ...
बिल्ड स्क्रिप्ट चलाएँ
npm run build
आउटपुट में बिल्कुल वही फ़ाइलें होनी चाहिए जो हमने package.json
में घोषित की थीं
और वोइला, हमने अपना पहला पैकेज बनाया। आइए अधिक जटिल परिदृश्यों पर एक नज़र डालें।
यदि आप रिएक्ट को अपनी लाइब्रेरी में लाना चाहते हैं, तो आप अभी भी इसे microbundle
उपयोग कर सकते हैं, लेकिन अब, आपका बिल्ड कमांड इस तरह दिखना चाहिए:
microbundle --jsx React.createElement --jsxFragment React.Fragment --jsxImportSource react --globals react/jsx-runtime=jsx
भविष्य की सुविधा के लिए build
स्क्रिप्ट में package.json
कमांड जोड़ें:
// package.json ... "scripts": { "build": "microbundle --jsx React.createElement --jsxFragment React.Fragment --jsxImportSource react --globals react/jsx-runtime=jsx" } ...
यूआई लाइब्रेरी बनाते समय, आपको एक सैंडबॉक्स की आवश्यकता हो सकती है जहां आप घटकों को विकसित कर सकते हैं, कल्पना कर सकते हैं और अपने दस्तावेज़ के लिए डेमो घटक प्रदान कर सकते हैं।
यहाँ कहानी की किताब आती है। यह अपने स्वयं के सुविधाजनक इंटरफ़ेस और बंडलर के साथ एक सैंडबॉक्स है, जहां आप आसानी से अपने घटकों की विभिन्न स्थितियों का वर्णन कर सकते हैं। आपके घटक स्थिति के प्रत्येक कैप्चर को "कहानी" कहा जाता है।
उनके दस्तावेज़ से ली गई यह तस्वीर दिखाती है कि यह कैसा दिखता है:
स्टोरीबुक इंस्टॉल करना काफी सरल है; बस अपनी लाइब्रेरी के अंदर कमांड चलाएँ:
npx storybook@latest init
यह कमांड स्टोरीबुक के लिए सभी आवश्यक निर्भरताएँ स्थापित करेगा, चलाने के लिए स्क्रिप्ट जोड़ेगा, और स्टोरीबुक को package.json
में बनाएगा, डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ एक फ़ोल्डर .storybook
बनाएगा, और फ़ोल्डर src/stories
में कहानियों के कुछ उदाहरण जोड़ेगा।
आप स्टाइलिंग को दो तरीकों में से एक में जोड़ सकते हैं: सीएसएस फ़ाइल या सीएसएस-इन-जेएस। सीएसएस फ़ाइल आसान अनुकूलन की अनुमति देती है लेकिन इसके लिए अलग से समावेशन की आवश्यकता होती है, जबकि सीएसएस-इन-जेएस स्टाइल को सरल बनाता है लेकिन बंडल आकार को बढ़ाता है।
सीएसएस फ़ाइल
Src निर्देशिका में एक CSS फ़ाइल बनाएं, और इसे रूट रिएक्ट घटक फ़ाइल में आयात करें:
// src/index.tsx import './styles.css'; export const MySuperComponent = () => { return ( <h1 className="title">Hi there!</h1> ) };
तो, आइए बिल्ड कमांड फिर से चलाएँ।
npm run build
और आपकी आयातित styles.css
फ़ाइल dist
फ़ोल्डर में बनाई जाएगी:
महान! हमने आवश्यक शैलियों के साथ एक सीएसएस फ़ाइल प्राप्त की है। हालाँकि, इस समाधान में थोड़ी असुविधा है। पैकेज स्थापित होने के बाद सीएसएस फ़ाइल को अलग से जोड़ना होगा।
इसलिए, आपकी लाइब्रेरी के उपयोगकर्ताओं को आपकी सीएसएस फ़ाइल को संभालने के लिए एक सीएसएस लोडर (उदाहरण के लिए, वेबपैक के लिए एक सीएसएस-लोडर) का उपयोग करने की आवश्यकता होगी, और उनका उपयोग इस तरह दिखेगा:
import { MySuperComponent } from 'my-super-library'; import 'my-super-library/dist/styles.css'; export const App = () => { return ( <MySuperComponent /> ); }
सीएसएस-इन-जेएस
आप इस उद्देश्य के लिए स्टाइल-घटकों जैसी लाइब्रेरी का उपयोग कर सकते हैं। और यह इस तरह दिखेगा:
import styled from 'styled-components'; const Title = styled.h1` font-size: 30px; font-weight: bold; `; export const MySuperComponent = () => { return ( <Title>Hi there!</Title> ) };
इस समाधान के साथ, उपयोगकर्ताओं को सीएसएस फ़ाइल आयात करने और अपने प्रोजेक्ट के लिए एक विशेष लोडर जोड़ने की आवश्यकता नहीं होगी। लाइब्रेरी स्थापित करने के बाद, घटक अपनी स्वयं की स्टाइल के साथ आएगा। हालाँकि, इससे बंडल का आकार बढ़ जाएगा और उपयोगकर्ताओं के लिए सीएसएस चयनकर्ताओं का उपयोग करके तत्वों को अनुकूलित करना अधिक कठिन हो जाएगा।
वह विकल्प चुनें जो आपके लिए सबसे उपयुक्त हो। मैं सीएसएस फ़ाइल का उपयोग करना पसंद करता हूं क्योंकि यह उपयोगकर्ताओं को सीएसएस चयनकर्ताओं के साथ किसी भी तत्व को अनुकूलित करने की अनुमति देता है, बंडल आकार को प्रभावित नहीं करता है, और तेजी से काम करता है।
एक README.md फ़ाइल आपकी लाइब्रेरी, इसे कैसे स्थापित करें, इसके मूल उपयोग और इसमें मौजूद सुविधाओं के बारे में जानकारी प्रदान करती है। यह अक्सर पहली फ़ाइल होती है जिसे डेवलपर्स आपके रिपॉजिटरी या एनपीएम पैकेज का सामना करने पर पढ़ते हैं, इसलिए यह संक्षिप्त और जानकारीपूर्ण होनी चाहिए।
मैं निम्नलिखित क्रम में एक संरचना बनाना पसंद करता हूं:
आप प्रेरणा के लिए मेरे पैकेज से README.md
फ़ाइलों के उदाहरण देख सकते हैं, जैसे dot-path-value और प्रतिक्रिया-नेस्टेड-ड्रॉपडाउन ।
यह एक महत्वपूर्ण हिस्सा है क्योंकि यदि आप इसे गलत करते हैं, तो उपयोगकर्ताओं को संस्करण विरोध या अन्य समस्याओं का सामना करना पड़ सकता है, और उन्हें आपकी लाइब्रेरी हटानी होगी। तो, आइए निर्भरता प्रकारों के बीच मुख्य अंतरों पर एक नज़र डालें।
microbundle
पैकेज स्थापित है, जिसे उपयोगकर्ताओं को उपयोग करने की आवश्यकता नहीं है, तो इसे डिपेंडेंसी में रखें, और यह बंडल में दिखाई नहीं देगा।
"सहकर्मी निर्भरता" वे निर्भरताएँ हैं जिनका आपका पैकेज उपयोग करता है लेकिन आपके बंडल में शामिल नहीं होगा। आपका पैकेज उस निर्भरता के संस्करण का उपयोग करेगा जो उपयोगकर्ता के पास उनके प्रोजेक्ट में है।
मूल रूप से, यदि हम इसके पारिस्थितिकी तंत्र के लिए एक पुस्तकालय बना रहे हैं तो हमें एक सहकर्मी निर्भरता निर्दिष्ट करनी चाहिए। उदाहरण के लिए, यदि आप एक रिएक्ट घटक बना रहे हैं, तो रिएक्ट को एक सहकर्मी निर्भरता के रूप में सेट करें। यदि एक कैलेंडर के साथ एक रिएक्ट घटक विकसित किया जा रहा है, तो रिएक्ट और एक दिनांक गणना लाइब्रेरी (उदाहरण के लिए, दिनांक-एफएनएस) को सहकर्मी निर्भरता के रूप में जोड़ें।
यदि उपयोगकर्ता के पास अपने प्रोजेक्ट में निर्दिष्ट सहकर्मी निर्भरता नहीं है, तो npm install
कमांड एक चेतावनी प्रदर्शित करेगा, लेकिन यह स्वचालित रूप से निर्भरता स्थापित नहीं करेगा।
यह कैसा दिखता है इसका एक छोटा सा उदाहरण:
// package.json ... "dependencies": { // libraries which will be installed along with your library "clsx": "^1.2.1" // just library for className combining }, "peerDependencies": { // user should have these packages installed "react": "^16.8.0 || ^17.0.0 || ^18.0.0" // user should have react 16.8+ version }, "devDependencies": { // won't be in user's bundle, these libraries just for your developing needs "@types/react": "^18.2.33", "react": "^18.2.0", // in case if we are using storybook, we need actual react library to render our components there "microbundle": "^0.15.1", }, ...
यदि आप एनपीएम पैकेज प्रकाशित कर रहे हैं, तो इसका मतलब है कि यह सार्वजनिक रूप से पहुंच योग्य होगा (यदि आपके पास एक निःशुल्क खाता है)। उपयोगकर्ताओं से प्रतिक्रिया एकत्र करने के लिए, आप अपने मूल कोड के लिए GitHub रिपॉजिटरी बना सकते हैं। लोग वहां मुद्दे बना सकते हैं और आपके पैकेज के बारे में आपसे संवाद कर सकते हैं। आप अपनी रिलीज़ का वर्णन भी कर सकते हैं और कुछ सितारे प्राप्त कर सकते हैं!
आप निश्चित रूप से इस चरण को छोड़ सकते हैं, लेकिन यह डेवलपर संस्कृति का एक अभिन्न अंग है और ओपन-सोर्स में एक मूल्यवान योगदान हो सकता है।
इससे पहले कि आप अपना पैकेज प्रकाशित कर सकें, यह सुनिश्चित करना आवश्यक है कि आपकी package.json
फ़ाइल ठीक से कॉन्फ़िगर की गई है। यहां अनुसरण करने योग्य कुछ महत्वपूर्ण चरण दिए गए हैं:
नाम दें और अपनी लाइब्रेरी की मुख्य कार्यक्षमता का वर्णन करने का प्रयास करें। उदाहरण के लिए:
"name": "react-color-picker"
GitHub रिपॉजिटरी जानकारी जोड़ें (यदि यह मौजूद है):
... "homepage": "https://github.com/{your_repository}", "repository": { "type": "git", "url": "https://github.com/{your_repository}" }, "bugs": { "url": "https://github.com/{your_repository}/issues" }, ...
files
कॉन्फ़िगर करें:
... "files": [ "dist", ], ...
आपको उन फ़ाइलों को निर्दिष्ट करना चाहिए जो आपकी लाइब्रेरी स्थापित होने पर node_modules
में शामिल की जाएंगी। आमतौर पर, dist
फ़ोल्डर को शामिल करना पर्याप्त है।
keywords
जोड़ें:
कीवर्ड स्ट्रिंग्स की एक श्रृंखला है जो आपके पैकेज का वर्णन करती है और एनपीएम द्वारा खोजों और अनुशंसाओं के लिए उपयोग की जाती है। अपने पैकेज के लिए प्रासंगिक शब्द चुनें जिनका आप अनुमान लगाते हैं कि लोग खोजते समय उपयोग करेंगे। आइए अपनी sum
लाइब्रेरी के लिए कीवर्ड बनाएं:
... "keywords": ["typescript", "math", "sum", "numbers", "arithmetic", "calculator", "calculation"] ...
अपनी प्रौद्योगिकियों को निर्दिष्ट करना महत्वपूर्ण है क्योंकि उपयोगकर्ता अक्सर "गणित के लिए टाइपस्क्रिप्ट लाइब्रेरी" या "प्रतिक्रिया कैलेंडर पिकर" जैसे शब्दों की खोज करते हैं।
यदि आपने पहले से एनपीएम खाता नहीं बनाया है, तो बनाएं और अपने टर्मिनल में npm login
चलाएं; अपने खाते को प्रमाणित करने के लिए संकेतों का पालन करें। डिफ़ॉल्ट रूप से, आपके पैकेज का संस्करण 1.0.0
होगा; आप इसे package.json
फ़ाइल में देख सकते हैं। मैं इसे 0.0.1
में बदलने की अनुशंसा करता हूं।
npm publish
चलाएँ, और आपका काम हो गया! भविष्य में संस्करण को अद्यतन करने के लिए, संस्करण को बढ़ाने के लिए npm version patch
कमांड का उपयोग करें, और फिर अद्यतन पैकेज को npm publish
के साथ प्रकाशित करें।
जैसा कि आप देख सकते हैं, अपनी खुद की लाइब्रेरी बनाना बहुत आसान है! मूलतः, पैकेज बनाने और बनाए रखने के लिए आपको बस यही चाहिए। यदि आप अपनी लाइब्रेरी को microbundle
के साथ सीमित करने में संघर्ष करते हैं, तो मैं अधिक विशिष्ट कॉन्फ़िगरेशन के साथ रोलअप.जेएस का उपयोग करने की सलाह देता हूं।
एनपीएम पैकेज बनाना और ओपन-सोर्स में योगदान करना सभी कौशल स्तरों के डेवलपर्स के लिए एक पुरस्कृत और मूल्यवान अनुभव है। यह आपको समुदाय के साथ अपना कोड साझा करने, ढेर सारा अनुभव प्राप्त करने और अपने काम का एक पोर्टफोलियो बनाने की अनुमति देता है।