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.

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.01.0.1
MINOR Yangi imkoniyat qo’shildi, eskisi ishlaydi 1.0.11.1.0
MAJOR Eski kod buzildi 1.1.02.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

  1. Yangi papkada npm init -y bilan paket yarating va index.js ga bitta funksiya yozing;
  2. main hamda files maydonlarini to’ldiring;
  3. Papkaga ortiqcha fayl qo’shib, npm pack --dry-run ro’yxatida u yo’qligini tasdiqlang;
  4. npm link bilan paketni boshqa loyihada sinab ko’ring;
  5. bin maydonini qo’shib, terminal buyrug’i yasang va uni argument bilan chaqiring;
  6. npm version patch bilan versiyani oshiring va package.json da 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.json fayli bor papka, boshqa talab yo’q.
  • main require() qaysi faylni ochishini belgilaydi.
  • files paketga kiradigan fayllarni cheklaydi — usiz ortiqcha narsa tushadi.
  • npm pack --dry-run yuborishdan oldin ro’yxatni ko’rsatadi.
  • npm link paketni chop etmasdan boshqa loyihada sinash imkonini beradi.
  • bin maydoni paketni terminal buyrug’iga aylantiradi, fayl boshida shebang bo’ladi.
  • Versiya MAJOR.MINOR.PATCH qoidasi bo’yicha oshiriladi: buzuvchi o’zgarish har doim MAJOR.

Keyingi darsda TypeScript bilan ishlash — turlar orqali xatoni ishga tushirishdan oldin topish.

Bu dars foydali bo'ldimi?

marta ko'rildi