O'z npm paketingizni yozish
npm darsida tayyor paketlarni o’rnatgansiz. Endi teskari tomonga o’tamiz. Ikkita loyihada bir xil yordamchi funksiyani nusxalab yurgan bo’lsangiz, uni paketga aylantirish vaqti keldi.
Paket yozish uchun ruxsat so’ralmaydi va murakkab sozlash kerak emas —
asosiysi package.json ni to’g’ri to’ldirish.
Paket nima
Sinash uchun kichik paket yozamiz. Yangi papka oching:
mkdir slugify-uz
cd slugify-uz
npm init -y
Wrote to D:\slugify-uz\package.json
Paket kodi
index.js faylini yarating:
function createSlug(title) {
return String(title)
.trim()
.toLowerCase()
.replace(/[^a-z0-9]+/g, "-")
.replace(/^-|-$/g, "");
}
module.exports = { createSlug };
Funksiya testlash darsidagi createSlug ning
o’zi — u yerda sinalgani uchun ishlashiga ishonch bor.
package.json maydonlari
Endi eng muhim qism. package.json ni shunday to’ldiring:
{
"name": "slugify-uz",
"version": "1.0.0",
"description": "Matndan URL uchun slug yasaydigan kichik paket",
"main": "index.js",
"files": ["index.js", "README.md"],
"keywords": ["slug", "url"],
"license": "MIT"
}
Har maydonning vazifasi bor:
| Maydon | Nima qiladi |
|---|---|
name |
Paket nomi — npm’da takrorlanmas bo’lishi kerak |
version |
Joriy versiya |
main |
require() qaysi faylni ochishini belgilaydi |
files |
Paketga qaysi fayllar kiradi |
license |
Ishlatish shartlari |
files — eng ko’p adashtiradigan maydon
files yozilmasa, papkadagi deyarli hamma narsa paketga tushadi.
Tekshirib ko’ramiz. Papkaga ortiqcha fayl qo’shing:
echo "ichki eslatma" > secret-note.txt
Endi paket ichiga nima tushishini yuborishdan oldin ko’ramiz:
npm pack --dry-run
npm notice package: slugify-uz@1.0.0
npm notice Tarball Contents
npm notice 13B README.md
npm notice 159B index.js
npm notice 227B package.json
npm notice Tarball Details
npm notice name: slugify-uz
npm notice version: 1.0.0
npm notice total files: 3
secret-note.txt ro’yxatda yo’q — files uni to’sib qoldi. Faqat uchta
fayl ketyapti.
Mahalliy sinash: npm link
Paketni chop etmasdan turib, boshqa loyihada sinab ko’rish mumkin.
Paket papkasida:
npm link
Endi sinov loyihasi oching:
cd ..
mkdir slug-test
cd slug-test
npm init -y
npm link slugify-uz
added 1 package in 340ms
app.js yozing:
const { createSlug } = require("slugify-uz");
console.log(createSlug("Node js darsi"));
console.log(createSlug(" Salom Dunyo! "));
node app.js
node-js-darsi
salom-dunyo
Paket o’rnatilgandek ishladi. Kodni o’zgartirsangiz, o’zgarish shu zahoti ko’rinadi — nusxa yo’q.
Sinov tugagach bog’lanishni uzing:
npm unlink slugify-uz
bin — terminal buyrug’i yasash
Paket funksiya emas, buyruq berishi ham mumkin. CLI dastur darsida yozgan vositani shu yo’l bilan tarqatasiz.
cli.js faylini yarating:
#!/usr/bin/env node
const { createSlug } = require("./index");
const args = process.argv.slice(2);
const title = args[0];
if (!title) {
console.log("Matn yozing: slugify \"Sarlavha matni\"");
process.exit(1);
}
console.log(createSlug(title));
Birinchi qator muhim.
package.json ga ikki o’zgarish kiriting:
{
"name": "slugify-uz",
"version": "1.0.0",
"description": "Matndan URL uchun slug yasaydigan kichik paket",
"main": "index.js",
"bin": {
"slugify": "cli.js"
},
"files": ["index.js", "cli.js", "README.md"],
"keywords": ["slug", "url"],
"license": "MIT"
}
bin dagi kalit — terminalda yoziladigan buyruq nomi. files ga
cli.js qo’shilgani ham shart, aks holda buyruq fayli paketga
tushmaydi.
Qayta bog’lang va sinang:
npm link
slugify "Birinchi maqolam"
birinchi-maqolam
Argumentsiz:
slugify
Matn yozing: slugify "Sarlavha matni"
CommonJS va ESM
Modul tizimi darsida ikki uslub ko’rilgan edi.
Paket qaysi birini qo’llab-quvvatlashini exports maydoni belgilaydi.
Eng sodda yo’l — bitta uslubda qolish. Yuqoridagi paket CommonJS
(require) uslubida yozilgan.
ESM uslubiga o’tish uchun package.json ga qo’shiladi:
{
"type": "module"
}
Unda index.js shunday yoziladi:
export function createSlug(title) {
return String(title)
.trim()
.toLowerCase()
.replace(/[^a-z0-9]+/g, "-")
.replace(/^-|-$/g, "");
}
Foydalanuvchi esa import bilan oladi:
import { createSlug } from "slugify-uz";
console.log(createSlug("Node js darsi"));
node-js-darsi
Semantik versiyalash
| Qism | Qachon oshiriladi | Misol |
|---|---|---|
PATCH |
Xato tuzatildi, xulq o’zgarmadi | 1.0.0 → 1.0.1 |
MINOR |
Yangi imkoniyat qo’shildi, eskisi ishlaydi | 1.0.1 → 1.1.0 |
MAJOR |
Eski kod buzildi | 1.1.0 → 2.0.0 |
Versiyani qo’lda tahrirlash o’rniga buyruq bor:
npm version patch
v1.0.1
Buyruq package.json ni yangilaydi.
README — paketning yuzi
npm sahifasida aynan README.md ko’rinadi. Usiz paketni hech kim
ishlatmaydi, chunki qanday chaqirishni bilmaydi.
Eng kam kerakli tuzilma:
# slugify-uz
Matndan URL uchun slug yasaydi.
## O'rnatish
npm install slugify-uz
## Ishlatish
const { createSlug } = require("slugify-uz");
createSlug("Node js darsi"); // "node-js-darsi"
## Litsenziya
MIT
Uch savolga javob bering: paket nima qiladi, uni qanday o’rnatiladi, qanday chaqiriladi.
Chop etish
Avval npm’da hisob ochiladi, so’ng terminalda kirasiz:
npm login
Nom bandligini tekshiring:
npm view slugify-uz
Agar nom bo’sh bo’lsa:
npm error code E404
npm error 404 Not found
Bu xato emas — aynan shu javob nom bo’sh ekanini bildiradi.
Chop etish:
npm publish
+ slugify-uz@1.0.0
Amaliy mashq
- Yangi papkada
npm init -ybilan paket yarating vaindex.jsga bitta funksiya yozing; mainhamdafilesmaydonlarini to’ldiring;- Papkaga ortiqcha fayl qo’shib,
npm pack --dry-runro’yxatida u yo’qligini tasdiqlang; npm linkbilan paketni boshqa loyihada sinab ko’ring;binmaydonini qo’shib, terminal buyrug’i yasang va uni argument bilan chaqiring;npm version patchbilan versiyani oshiring vapackage.jsonda o’zgarganini ko’ring.
3-qadam eng muhimi: paketga nima tushayotganini bilmaslik maxfiy ma’lumot sizib chiqishining eng keng tarqalgan sababi.
Qisqacha xulosa
- Paket —
package.jsonfayli bor papka, boshqa talab yo’q. mainrequire()qaysi faylni ochishini belgilaydi.filespaketga kiradigan fayllarni cheklaydi — usiz ortiqcha narsa tushadi.npm pack --dry-runyuborishdan oldin ro’yxatni ko’rsatadi.npm linkpaketni chop etmasdan boshqa loyihada sinash imkonini beradi.binmaydoni paketni terminal buyrug’iga aylantiradi, fayl boshida shebang bo’ladi.- Versiya
MAJOR.MINOR.PATCHqoidasi bo’yicha oshiriladi: buzuvchi o’zgarish har doimMAJOR.
Keyingi darsda TypeScript bilan ishlash — turlar orqali xatoni ishga tushirishdan oldin topish.